[GHC] #15546: Display coaxiom branch incompatibilities in GHCi
GHC
ghc-devs at haskell.org
Tue Aug 21 16:36:01 UTC 2018
#15546: Display coaxiom branch incompatibilities in GHCi
-------------------------------------+-------------------------------------
Reporter: mniip | Owner: (none)
Type: feature request | Status: new
Priority: normal | Milestone: 8.6.1
Component: GHCi | Version: 8.4.3
Resolution: | Keywords: TypeFamilies,
| GHCi
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 mniip):
The other (actually this) day I discovered that type family compatibility
checks do not reduce the LHS and expect the equality to trivially hold.
Example:
{{{#!hs
type family If (a :: Bool) (b :: k) (c :: k) :: k where
If False a b = b
If True a b = a
type family Eql (a :: k) (b :: k) :: Bool where
Eql a a = True
Eql _ _ = False
type family Test (a :: Maybe k) (b :: Maybe k) :: Maybe k where
Test (Just x) (Just y) = If (Eql x y) (Just x) Nothing
Test a a = a
Test Nothing _ = Nothing
Test _ Nothing = Nothing
}}}
{{{#!hs
axiom D:R:Test::
Test a ('Just x) ('Just y) = If (Eql x y) ('Just x) 'Nothing
Test k a a = a
(incompatible indices: [0])
Test k 'Nothing _ = 'Nothing
Test k _ 'Nothing = 'Nothing
}}}
Clearly `unify(<a, a>, <Just x, Just y>) = theta = [a = Just x, y = x]`.
`theta(If (Eql x y) (Just x) Nothing) = Just x = theta(a)`.
If you would like to discuss this restriction I can open another ticket.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15546#comment:4>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list