
HList certainly provides an alternative. But given the use of
UndecidableInstances and OverlappingInstances, I was hoping that type
families could come a little cleaner. Or does it not matter?
On Fri, Jul 16, 2010 at 8:32 PM, Steffen Schuldenzucker
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) _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
-- Regards, Paul Liu Yale Haskell Group http://www.haskell.org/yale