
#14998: Sort out the strictness mess for exceptions -------------------------------------+------------------------------------- Reporter: simonpj | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.4.3 Component: Compiler | Version: 8.2.2 Resolution: | Keywords: Exceptions Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by sgraf): ... Although it's unclear to me ''why'' the bang has such a dramatic effect. I presumed that the call to `hGetBuf` and `hPutBuf` were responsible for this, but going up from `do_operation`, I can't see any changes in Core resulting from the changed strictness signatures. In fact, the activations go like this: {{{ GHC.IO.Handle.Text.hPutBuf -> GHC.IO.Handle.Internals.wantWritableHandle -> GHC.IO.Handle.Internals.withHandle_' -> GHC.IO.Handle.Internals.withHandle' }}} Note from the first diff in comment:10, that while the signature for `withHandle'` differs relative to HEAD, that is not the case for `withHandle_'` (hooray for names)! `withHandle_'` is lazy in its `act`ion parameter in both versions. It should probably have `C(S)`, too, if it has in `withHandle'`, but that's a separate issue. Since there is no difference in signatures for `withHandle_'`, there is no flow in strictness information to callees, which means that the bang just fixes some kind of space leak. Which is weird, because I don't see any big data structures involved with forcing the result of the `act`ion. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14998#comment:13 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler