
#13906: ApplicativeDo doesn't handle existentials as well as it could -------------------------------------+------------------------------------- Reporter: dfeuer | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.4.1 Component: Compiler | Version: 8.0.1 Resolution: | Keywords: ApplicativeDo Operating System: Unknown/Multiple | Architecture: Type of failure: GHC rejects | Unknown/Multiple valid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by dfeuer): Copied from Phab:D3691: simonmar: But the proposal in Trac #13906 loses some opportunities for parallelism. e.g. {{{#!hs do T x1 <- A x2 <- B[x1] T x2 <- C x4 <- D[x2] return (x2,x4) }}} and we want to get `(A;B) | (C;D)`, not `(A; (B|C); D)` ---- dfeuer: We do? I think we don't. Suppose we have {{{#!hs do () <- m n }}} Surely we only want to perform `n` if `m` successfully produces non-bottom `()`. The dependency is implicit. To get the parallelism, you need to eliminate the strict binding. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13906#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler