
Can you explain more about this example? I think that it is important
#15639: Surprising failure combining QuantifiedConstraints with Coercible -------------------------------------+------------------------------------- Reporter: dfeuer | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.6.1 Component: Compiler (Type | Version: 8.5 checker) | Keywords: Resolution: | QuantifiedConstraints 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): Replying to [comment:5 simonpj]: that
* You give a role signature for `Yeah`. (What is the inferred
signature?) The inferred signature is `type role Yeah phantom`
* You export the type constructor for `Yeah` but not the data constructor.
Yes. The export isn't really as relevant as the import it enables; when a newtype constructor is in scope that changes the coercion axioms the type checker uses for the type.
But I'm a bit lost about what you expect to happen. Can you amplify? Why do you think it should typecheck? It'd probably help to give the declaration for `Coercion` too, for those of us who do not use it daily.
The declaration of `Coercion` is {{{#!hs data Coercion a b where Coercion :: Coercible a b => Coercion a b }}} The situation is {{{#!hs yeahCoercible :: ((forall a b. Coercible (Yeah a) (Yeah b)) => r) -> r yeahCoercible r = r -- Fishy2.hs yeah :: Coercion [Yeah a] [Yeah b] yeah = yeahCoercible Coercion }}} We call `yeahCoercible` with `Coercion`. For this to typecheck, we need {{{#!hs Coercion :: (forall a b. Coercible (Yeah a) (Yeah b)) => Coercion [Yeah a] [Yeah b] }}} Put another way, we need `Coercible (Yeah a) (Yeah b)` to imply `Coercible [Yeah a] [Yeah b]`. Under normal circumstances, that would follow from the fact that `[]`'s parameter has a representational role. But the constraint solver isn't figuring that out. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15639#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler