[Haskell-beginners] help with IO guards

Miro Karpis miroslav.karpis at gmail.com
Thu Jan 15 11:51:37 UTC 2015


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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20150115/79289d65/attachment.html>

More information about the Beginners mailing list