Hi André,
The problem is that hGetContents does lazy reading of the handle.
I you do:
readDataFromFile "test.txt" >>= print
the handle is closed by hClose (in readDataFromFile) before "print"
demands the contents from the handle.
Just don't close the Handle explicitly.
This code works:
readDataFromFile filename =
do h <-openFile filename ReadMode
contents <- hGetContents h
return (lines contents)
You do not really need to close it, because hGetContents "semi-closes"
the handle. Read more:
http://www.haskell.org/onlinereport/io.html (Section 21.2.2
Semi-Closed Handles)
http://users.aber.ac.uk/afc/stricthaskell.html#semiclosed
Cheers,
Arthur
On 12-aug-05, at 14:17, André Vargas Abs da Cruz wrote:
Hi everyone,
I think this is a totally newbie question as i am a complete novice
to Haskell. I am trying to write down a few programs using GHC in
order to get used with the language. I am having some problems with a
piece of code (that is supposed to return a list of lines from a text
file) which I transcribe below:
module Test where
import IO
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.
Thanks in advance
André
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe