[Haskell-cafe] Re: type class question
Peter Padawitz
peter.padawitz at udo.edu
Mon Dec 10 10:12:01 EST 2007
Jules Bean wrote:
> Peter Padawitz wrote:
>
>> Jules Bean wrote:
>>
>>> Peter Padawitz wrote:
>>>
>>>> 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.
>>>
>>> making it part of the class allows instances to override the
>>> implementation.
>>>
>>> Which in this case is a strange thing to do.
>>
>> Sure, but this can only happen because Haskell does not check whether
>> the instances satisfy the equations in the class. The type class
>> concept would be "cleaner" if all methods (partially or totally)
>> defined by equations within the class were not allowed to be
>> instantiated!
>>
> I don't see why!
>
> In the class
>
> class Foo a where
> f :: a -> Int
> g :: b -> Integer
> g = fromIntegral . f
>
> The equations within the class are defaults, not equations.
I must admit that I didn't know this... Nevertheless, won't you agree
that the default and the actual instance should be semantically equivalent?
> The equation for 'g' is a default, not a rule.
>
> If you want equations, you do it outside the class. I have written
> that class wrongly, I should actually write g = fromIntegral . f as a
> function outside the class, thus guaranteeing the implementation and
> stopping people breaking that invariant.
>
> The purpose of methods with defaults is to allow the possibility that
> there is an obvious natural way to implement one function in terms of
> others, but there might be more efficient ways.
>
> For example, the Foldable class should (but doesn't) have a member
> length. This could be defaulted to length . toList, but have a more
> efficient implementation in Sequence, which stores its own length anyway.
>
> Or maybe we are at cross-purposes.
No no, default functions make sense.
More information about the Haskell-Cafe
mailing list