[Haskell] strictness of putChar: report incomplete?

Duncan Coutts duncan.coutts at worcester.oxford.ac.uk
Tue Oct 4 09:15:59 EDT 2005


On Tue, 2005-10-04 at 13:46 +0100, Malcolm Wallace wrote:
> I wrote:
> 
> > > ghc:
> > > putChar _|_ -> _|_
> > > 
> > > hugs:
> > > putChar _|_ -> valid IO ()
> > 
> > I think it comes down to buffering behaviour doesn't it?
> 
> Having reviewed the IRC logs, I see I was talking nonsense.
> 
> You want to be able to store a closure for (putChar undefined) in a
> data structure, which seems like a perfectly reasonable thing to do.
> Provided the IO action is never actually run (after being retrieved
> from the data structure), the program really ought not to crash.
> 
> I see that nhc98 and hbc agree with Hugs on this behaviour, so ghc
> _must_ be wrong.  :-)

Looking at GHC's library code we see that it is indeed forcing the char
early:

hPutChar :: Handle -> Char -> IO ()
hPutChar handle c =
    c `seq` do
    ...

Duncan



More information about the Haskell mailing list