Jules Bean wrote:

Try again without missing out the list...

Peter Padawitz wrote:
> Jules Bean wrote:
>> Incidentally, I question why the "compFoo" are methods. Why not just make them polymorphic functions? They don't look like you expect instances to change them. The code continues to compile if I make them functions and amend their signatures as required.
>
> I put compFoo into the class for the same reason why /= is part of the class Eq: both functions are unique as soon as the others have been instantiated.

I believe you misunderstand the reason.

/= is part of Eq in case a particular instance has a particularly efficient way to implement /=, rather than using not and (==).

"Being unique as soon as the others are implemented" is not a reason not to make it a method.

It might not have been the reason, but it is a nice effect that is often taken advantage of.

What is so bad about making compFoo part of the class? It reduces the code (constraints can be avoided) and reflects the close connection between a signature Sig (implemented by the class) and the evaluation (compFoo) of Sig-terms in Sig-algebras.

compBlock :: (Java block command intE boolE) => Block -> block
compBlock = block_ . map compCommand

still retains that property.

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to