
On Wed, Dec 10, 2014 at 3:34 AM, Christopher Reichert wrote: Google around for "haskell lazy io withFile" and you might find more
detailed explanations. Yes indeed. The explanations are pretty good too.
This is a gotcha that deserves to be more widely known. A recent patch to
ghc gives a better error message explaining what's going on.
How does one go about using withFile correctly then?
If you see the code "withFile filename ReadMode" chances are you should
replace it with "readFile filename".
Hence, instead of
main = do
cnts <- withFile "example.hs" ReadMode $ (\h -> do
res <- hGetContents h
--putStr res
return res)
putStr cnts
write
main = do
cnts <- readFile "example.hs"
putStr cnts
or more idiomatically
main = readFile "example.hs" >>= putStr
-- Kim-Ee