[Haskell-cafe] Newbie question

David Roundy droundy at darcs.net
Fri Aug 12 08:49:25 EDT 2005


On Fri, Aug 12, 2005 at 09:17:32AM -0300, Andr Vargas Abs da Cruz wrote:
> readDataFromFile filename = do
>    bracket (openFile filename ReadMode) hClose
>            (\h -> do contents <- hGetContents h
>                      return (lines contents))
> 
>    The question is: if i try to run this, it returns me nothing (just 
> an empty list). Why does this happen ? When i remove the "return" and 
> put a "print" instead, it prints everything as i expected.

I think that this may be because hGetContents puts the file in a
semi-closed state (and reads the contents lazily).  Try removing the hClose
(replacing it with (return ()).  Lazy IO is nice, but gets tricky at
times.
-- 
David Roundy
http://www.darcs.net


More information about the Haskell-Cafe mailing list