[GHC] #12422: Add decidable equality class
GHC
ghc-devs at haskell.org
Fri Jul 22 16:04:21 UTC 2016
#12422: Add decidable equality class
-------------------------------------+-------------------------------------
Reporter: dfeuer | Owner:
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Core Libraries | 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 goldfire):
There are several fun things to respond to here!
1. Making `:~:` heterogeneous would likely break client code. The problem
is that, right now, if I say `(Int :~: a)` somewhere, GHC can know that `a
:: Type`. If we make `:~:` hetero, then GHC would rightly have `a :: k`,
which can cause trouble. This is not hypothetical: I tried making this
change once upon a time, and things broke. Even worse, it was hard to go
from the error message reported to the actual cause. I advocate against
this change.
2. We should have `:~~:` in the standard library. But I was too exhausted
from implementing `TypeInType` to start this debate on the libraries
mailing list. We should really put it in for 8.2.
3. Here is the hetero version of `TestEquality`:
{{{
-- hetero
class HTestEquality (f :: forall k. k -> Type) where
hTestEquality :: f a -> f b -> Maybe (a :~~: b)
}}}
Note that `f` has to be polymorphic in its kind to avoid constraining
`a` and `b` to have the same kind. Yes, this is a higher-rank kind!
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12422#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list