[EMAIL PROTECTED] writes: > > There is a great temptation to read the following declarations > > class Pred a b > instance (Ord b, Eq b) => Pred [Int] b > instance Pred Bool Bool > > as a Prolog program: > > pred([int],B) <- ord(B),eq(B). > pred(bool,bool). > > (In Prolog, the names of variables are capitalized and the names of > constants begin with a lower-case letter. In Haskell type expressions, > it's the other way around). >
Why not simply say that type classes have a natural interpretation in terms of Constraint Handling Rules (CHRs). For example, the above instances translate to rule Pred [Int] <==> Ord b, Eq b rule Pred Bool Bool <==> True CHRs specify rewrite rules among constraints (from left to right). A CHRs fires if we find a constraint which matches the left hand side (compare this to Prolog where we use unification). Why CHRs are great for reasoning about type classes is well-documented here: http://www.comp.nus.edu.sg/~sulzmann/research/node4.html Martin _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
