[Haskell-cafe] IO and lazyness.
D.V.
dav.vire+haskell at gmail.com
Tue Mar 6 13:37:38 EST 2007
Hello,
I'm still learning Haskell and I am stuck on a probably simple problem.
Assume I have a file where lines are of the form "key=value"
I want to search a value in that file and came up with the following code.
> rechf :: String -> IO (Maybe String)
> rechf r = bracket (openFile "liste" ReadMode)
(hClose)
(rechf2 r)
>
> rechf2 :: String -> Handle -> IO (Maybe String)
> rechf2 r h= do
> f <- hGetContents h
> --print f
> return $ rech r $ lines f
>
> rech :: String -> [ String ] -> Maybe String
> rech r l = lookup r $ map span2 l
>
> span2 :: String->(String,String)
> span2 c = (a,b)
> where a=takeWhile (/='=') c
> b=drop 1 $ dropWhile (/='=') c
Now the problem is this :
1) if I try rechf, it returns nothing even for a key that exists in the file.
2) if I uncomment the line where there is "print f", the key is found
and the value returned.
I'm guessing print forces f to be evaluated, so the file is actually
read, but I was wondering why it doesn't work without it and how to
correct that.
David.
More information about the Haskell-Cafe
mailing list