[GHC] #15359: Quantified constraints do not work with equality constraints
GHC
ghc-devs at haskell.org
Wed Jul 11 13:31:31 UTC 2018
#15359: Quantified constraints do not work with equality constraints
-------------------------------------+-------------------------------------
Reporter: goldfire | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone: 8.6.1
Component: Compiler | Version: 8.5
Keywords: | Operating System: Unknown/Multiple
QuantifiedConstraints |
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
Feeling abusive toward GHC this morning, I tried this:
{{{#!hs
class C a b
data Dict c where
Dict :: c => Dict c
foo :: (forall a b. C a b => a ~ b) => Dict (C a b) -> a -> b
foo Dict x = x
}}}
I thought it wouldn't work, and I was right:
{{{
• Class ‘~’ does not support user-specified instances
• In the quantified constraint ‘forall (a :: k) (b :: k).
C a b =>
a ~ b’
In the type signature:
foo :: (forall a b. C a b => a ~ b) => Dict (C a b) -> a -> b
}}}
Good. But then I tried something more devious:
{{{#!hs
class C a b
class a ~ b => D a b
data Dict c where
Dict :: c => Dict c
foo :: (forall a b. C a b => D a b) => Dict (C a b) -> a -> b
foo Dict x = x
}}}
This also fails, with ` Couldn't match expected type ‘b’ with actual type
‘a’`.
I'm fine with the second case failing (because I think anything else would
be very challenging), but the error message is unfortunate. According to
the semantics of class constraints and quantified constraints, this case
should be accepted. So if we reject it, we should have a good reason --
like we offer in the first case. Essentially, we need to explain that any
logical entailment of an equality constraint simply doesn't hold in the
presence of a quantified constraint. I neither know a good pithy way of
explaining that to users nor how to detect when to do so.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15359>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list