[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