
#12620: Allow the user to prevent floating and CSE -------------------------------------+------------------------------------- Reporter: nomeata | Owner: Type: feature request | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.0.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #9520, #8457 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by edsko): Fair enough, that's an easier workaround. But the idea is to have something a little more compositional. For example, in the case of conduits, we probably ''never'' want to share a conduit value. So it would be great if we could annotate the conduit constructors with a noupdate annotation, and then users of the conduit library don't have to worry about this problem anymore. After all, in the list example, it's not obvious that {{{#!hs main :: IO () main = retry $ runConduit someConduit }}} has a space leak; even less so when that retry and the runConduit are in different places: {{{#!hs go :: IO () go = runConduit someConduit main :: IO () main = retry go }}} We'd need to have the foresight to write {{{#!hs main :: IO () main = retry $ return () >>= \_ -> go }}} The situation really is very close to strictness; do we want to make sure every single function using a datatype has the right seqs in the right place, or we just put some strictness annotations on the datatype? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12620#comment:13 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler