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 <sschuldenzuc...@uni-bonn.de> wrote: > 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) > _______________________________________________ > 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 _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe