[Haskell-cafe] Re: Type classes and type equality
Neil Mitchell
ndmitchell at gmail.com
Tue Apr 17 20:47:04 EDT 2007
Hi
> I guess it depends on how many extensions one may wish to enable. At
> the very least we need multi-parameter type classes with functional
> dependencies (because that's what TypeEq is in any case).
>
> - If we permit no other extension, we need N^2 instances to compare N
> classes for equality (basically, for each type we should say how it
> compares to the others). This is not practical except in very limited
> circumstances.
>
> - If we permit undecidable instances, one may assign numerals to
> types. This gives us total order and hence comparison on types.
> In this approach, we only need N instances to cover N types. This is
> still better than Typeable because the equality is decided and can be
> acted upon at compile time.
In my particular case whether I act at compile time or run time is
unimportant, but obviously this is an important advantage in general.
Unfortunately a cost of one instance per type is still higher than I'd
like to pay :-)
> - If we permit overlapping instances extension, then a few lines of code
> decide equality for all existing and future types:
>
> class TypeEq x y b | x y -> b
> instance TypeEq x x HTrue
> instance TypeCast HFalse b => TypeEq x y b
This is exactly what I was after, but it doesn't seem to work in Hugs
- even with overlapping instances and unsafe overlapping instances
turned on.
*** This instance : TypeEq a b c
*** Conflicts with : TypeEq a a HTrue
*** For class : TypeEq a b c
*** Under dependency : a b -> c
Is there any way to modify this to allow it to work under Hugs as well?
Thanks very much for your help,
Neil
More information about the Haskell-Cafe
mailing list