overlapping instances and constraints

Claus Reinke claus.reinke at talk21.com
Tue Feb 28 05:54:25 EST 2006

>> instance C2 a b | a/=b
> I was thinking it would be all kinds of useful if we had two predefined
> classes
> class Eq a b
> class NEq a b
> where Eq has instances exactly when its two types are equal and NEq has
> instances exactly when its two types are not equal.

    class Eq a b
    instance Eq a a

    class NEq a b
    instance Fail a => NEq a a
    instance NEq a b

    class Fail all -- no instances

I think I first saw that class Fail trick in an HList talk. but having those
instances doesn't help if they are not used (eg, by following instance
constraints, to aid in overlap resolution, or to confirm FDs; or simply
because the system doesn't use the fact that Fail never has instances).
Even just extending Eq/NEq to type-level predicates (with a 3rd,
functionally dependent parameter) runs into trouble.

I'd prefer to extend the language so that those uses become expressible,
but for the short term, it'd be nice if the predicates _and_ their uses
were built-in. hence the special syntax to indicate that this predicate is
actually looked at when checking the instance.


> Eq should be straightforward to implement, declaring any type
> automatically creates its instances. (sort of an auto-deriving). NEq
> might be more problematic as that would involve a quadratic number of
> instances so its implementation might need to be more special. but
> perhaps we can do with just 'Eq'.
>        John
> -- 
> John Meacham - ⑆repetae.net⑆john⑈
> _______________________________________________
> Haskell-prime mailing list
> Haskell-prime at haskell.org
> http://haskell.org/mailman/listinfo/haskell-prime 

More information about the Haskell-prime mailing list