
#15226: GHC doesn't know that seq# produces something in WHNF -------------------------------------+------------------------------------- Reporter: dfeuer | Owner: (none) Type: bug | Status: merge Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.4.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Runtime | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D4796 Wiki Page: | -------------------------------------+------------------------------------- Changes (by dfeuer): * status: patch => merge Comment: I think this is likely simple enough to merge. We still don't mark the ''argument'' to `seq#` as evaluated in the case branch: {{{#!hs do _ <- evaluate x pure (Str x) }}} will still think it has to force `x` again. I suspect there are likely users doing such things. I think the fix should be really simple, but I don't know how to do it. We should (I believe) rewrite {{{#!hs case seq# x s of (# s', x' #) -> E }}} to {{{#!hs case seq# x s of (# s', x' #) -> E [x -> x'] }}} In principle, we could do something like that for `spark#` as well, but it's probably better to let threads fizzle than to let users rely on the optimizer to make their parallel code do what they expect. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15226#comment:6 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler