[Haskell-cafe] Multi-param typeclass vs locally constrained typeclass methods

Jacques Carette carette at mcmaster.ca
Wed Sep 18 16:27:08 CEST 2013


On 13-09-18 08:54 AM, Roman Cheplyaka wrote:
> * Jacques Carette <carette at mcmaster.ca> [2013-09-18 08:21:51-0400]
>> Could someone please explain what the difference (if any!), in
>> semantics is between
>>
>> class Foo f => Bar f g where
>>    method1 :: f a -> g a
>>
>> and
>>
>> class Bar' g where
>>    method2 :: Foo f => f a -> g a
> Bar is more flexible than Bar'. If you have n types, you can write n^2
> Bar instances (potentially having very different semantics) to convert
> between them.
>
> You can only write n Bar' instances, on the other hand. In these
> instances you can dispatch based on 'g' but not on 'f'. 'f' is abstract,
> and you only can access it through the Foo interface.
>
> So they are quite different.

Right, that makes sense, thanks.

Turns out that, in my case, I frequently want the Bar' case, as I want 
things to be fully polymorphic in Foo.

Jacques



More information about the Haskell-Cafe mailing list