[Haskell-cafe] in-equality type constraint?
Steffen Schuldenzucker
sschuldenzucker at uni-bonn.de
Fri Jul 16 20:32:43 EDT 2010
On 07/17/2010 01:08 AM, Paul L wrote:
> Does anybody know why the type families only supports equality test
> like a ~ b, but not its negation?
>
This has annoyed me, too. However, HList provides something quite similar,
namely the TypeEq[1] fundep-ed class which will answer type-equality with a
type-level boolean. (this is actually more powerful than a simple constraint,
because it allows us to introduce type-level conditionals)
To turn it into a predicate, you can use something like
(disclaimer: untested)
> class C a b c where -- ...
>
> -- for some reason, we can provide an instance C a b [c] *except* for
> -- a ~ c.
> instance (TypeEq a c x, x ~ HFalse) => a b [c] where -- ...
Best regards,
Steffen
[1]
http://hackage.haskell.org/packages/archive/HList/0.2.3/doc/html/Data-HList-FakePrelude.html#t%3ATypeEq
(Note that for it to work over all types, you have to import one of the
Data.HList.TypeEqGeneric{1,2} modules)
More information about the Haskell-Cafe
mailing list