
#11786: Need -fno-print-explicit-runtime-reps to work on IfaceType, else RuntimeRep leaks -------------------------------------+------------------------------------- Reporter: simonpj | Owner: (none) Type: bug | Status: new Priority: highest | Milestone: 8.6.1 Component: Compiler | Version: 7.10.3 Resolution: | Keywords: | LevityPolymorphism Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #13275, #15181 | Differential Rev(s): Phab:D4733 Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): Yikes. I have just wasted 30 minutes (in Core dumps) figuring out why a type printed as {{{ forall a b. Eq a => blah }}} didn't match a term {{{ /\ a. \(d :: Eq a). blah }}} Turns out that the real type is `forall a. Eq a => forall b. blah`, but the pretty printer silently moves the foralls to the top. This is done in `splitIfaceSigmaTy` in the patch in comment:13. It might be ''just'' arguable to move the foralls around for ''user'' types. E.g in test `ghci025` we now report {{{ return :: Monad m => a -> m a }}} whereas previously it was {{{ return :: Monad m => forall a. a -> m a }}} But we definitely should not do this in Core printouts. I also noticed that in the output for `ghci025` we have {{{ c3 :: forall a b a. C a b => a -> b }}} The repeated 'a' is terrible! So I'm re-opening this ticket to ask: do we want to swizzle the foralls to the top, even in user printout? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11786#comment:16 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler