| 1) Coerce a a can be defined as coerce=id for all a. However, this | may of course lead to overlap in the type structure, so we must | write a separate instance definition for Coerce Int Int, Coerce | Double Double, etc. if we want types to be decidable. I'd love for | some clever person to solve this little difficulty.
Indeed so. And instance Coerce a a where coerce = id does not overlap with instance Coerce Int Bool where ... instance Coerce Bool Int where ... There's no overlap here. (Overlap = there is a Coerce t1 t2, which matches more than one instance decl.) Furthermore, it works fine; I just tried it. | 2) When we define D a b c, we know that D b a c is also allowed. | Again, decidability prevents us from asserting this directly. | Again, a clever solution could save us a lot of code and even more | debugging. I suspect this may be a marginally easier nut to crack | than the previous one. Much harder, I think. Commutativity is always tricky! Simon _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell