Hi,
please is there a way to have guards with 'where' that
communicates with IO? Or is there some other more elegant
way? I can do this with classic if/else,...but I just find
it nicer with guards.
I have something like this (just an example):
f :: Int -> IO String
f x
| null dbOutput = return "no db record"
| otherwise = return "we got some db records"
where dbOutput = getDBRecord x
getDBRecord :: Int -> IO [Int]
getDBRecord recordId = do
putStrLn $ "checking dbRecord" ++ show recordId
--getting data from DB
return [1,2]
problem is that db dbOutput is IO and the guard check
does not like it:
Couldn't match expected type ‘[a0]’ with actual type ‘IO
[Int]’
In the first argument of ‘null’, namely ‘dbOutput’
In the expression: null dbOutput