
#12643: class declaration works in ghci, but not in a file -------------------------------------+------------------------------------- Reporter: dmwit | Owner: Type: bug | 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: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): Crumbs. This is another variation of #11348, and its as-yet-unsolved cousin #12088. In this case, we must type check in this order: 1. `deriving instance Generic (ExceptT e m a)`. This generates a `type instance Rep (Except e m a) = ...` declaration, for `Generic`'s associated type `Rep`. 2. `class F a where ...`. We must do this second because `f`'s type can be seen to be unambiguous only after expanding the call to `Rep`. However the fix to #11348 arranges to interleave `type instance` declarations with type/class decls; but `deriving instance` declarations are still left to the end. The fix is, I think, to include `deriving instance` decls in the interleaving. Workaround for now: make the staging explicit with a degenerate Template Haskell splice, thus: {{{ deriving instance Generic (ExceptT e m a) $( return [] ) -- Degenerate splice class F a where f :: Rep (Except String a) x }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12643#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler