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.

cheers,
claus

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@haskell.org
http://haskell.org/mailman/listinfo/haskell-prime

_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://haskell.org/mailman/listinfo/haskell-prime

Reply via email to