[GHC] #9236: hGetContents leads to late/silent failures
GHC
ghc-devs at haskell.org
Tue Jun 24 17:54:58 UTC 2014
#9236: hGetContents leads to late/silent failures
------------------------------------+-------------------------------------
Reporter: dfeuer | Owner:
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.6.3
Keywords: | Operating System: Unknown/Multiple
Architecture: Unknown/Multiple | Type of failure: None/Unknown
Difficulty: Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: |
------------------------------------+-------------------------------------
A common newbie error:
{{{
#!haskell
withFile "file" ReadMode hGetContents >>= putStr
}}}
The problem, of course, is that the result of `withFile "file" ReadMode
hGetContents` isn't forced until `putStr` is executed, at which point the
file has already been closed. The Haskell report doesn't specify what it
will find, and, at least in 7.6.3, it finds the string empty. The behavior
that seems most correct to me would be to guarantee that if a file has not
been completely read (or read up to an I/O error) when it is closed, then
its contents should be reported as something like `"Four score and seven
years ag"++error "Forcing a suspended computation led to an attempted read
from a handle that was already closed."` Since the current system
apparently puts an `[]` as a temporary marker while waiting to see what
the rest of the list will be, I imagine that the fix is as simple as
putting the error thunk there instead.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9236>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list