
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-... (Note that for it to work over all types, you have to import one of the Data.HList.TypeEqGeneric{1,2} modules)