
#12784: Typechecker regression in GHC 8.0.2 involving DefaultSignatures -------------------------------------+------------------------------------- Reporter: RyanGlScott | Owner: Type: bug | Status: new Priority: highest | Milestone: 8.0.2 Component: Compiler | Version: 8.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: GHC rejects | Unknown/Multiple valid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D2682 Wiki Page: | -------------------------------------+------------------------------------- Comment (by rwbarton): I like that your proposal is clear on the status of a program like {{{ class Monad m => MonadSupply m where fresh :: m Integer default fresh :: (Monad n, MonadTrans t) => t n Integer -- NB: not m fresh = lift fresh }}} which does seem like a reasonable attempt at writing a correct default signature. But it's not obvious how to type check in the presence of what amount to two type signatures for the same declaration. On the other hand, it's mildly unsatisfactory that in order to write your recommended version, you need to enable another language extension that in turn enables `MonoLocalBinds` by default, which can affect unrelated declarations in the module. It feels like the use of type equalities here is fairly mild and shouldn't logically entail the need for reasoning about local type equalities in pattern matches and so on. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12784#comment:18 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler