Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Do you have any references for that? I looked through some Haskell documentation and didn't see anything warning about those functions being unsafe (although there does seem to be an unsafeHGetContents in System.IO.Unsafe).

Is there's something I'm missing that says "hey, this function uses unsafePerformIO behind the scenes" or whatnot? Being not very experienced with Haskell I'm a little worried about library functions being unsafe without me realizing it.



It's just getContents (and brother hGetContents).

Using getContents is fine for a quick way to slurp in a file, but it's like doing a read without checking for -1. Since haskell is lazy, figuring out why an underlying read failed can be fairly confusing.

If you think your program is doing IO and there's no IO type getting in the way, unsafePerformIO is lurking in the darkness.


Well, I was confused because getContents seems to be of type "IO String": http://www.haskell.org/ghc/docs/latest/html/libraries/base/P...

I can see why a lazy input stream could make things opaque even in a completely type-safe program, though.


The behavior of hGetContents is documented at http://www.haskell.org/ghc/docs/latest/html/libraries/base/S... .

If you write

    do h <- openFile "foo.txt" ReadMode
       x <- hGetContents h
       putStr x
you'll get different behavior than if you write

    do h <- openFile "foo.txt" ReadMode
       x <- hGetContents h
       hClose h
       putStr x
In the first example, you'll print out the contents of the file. In the latter, you'll print out nothing.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: