Can Class do this?

Marcin 'Qrczak' Kowalczyk [email protected]
Tue, 6 Mar 2001 14:05:23 +0100 (CET)


On Tue, 6 Mar 2001, Saswat Anand wrote:

> I guess this can be done using classes, but I have not been successful
> after trying many variations.

It requires extensions supported by ghc and Hugs: multiparameter type
classes are required, functional dependencies are recommended.

Functional dependencies don't work well for released ghc versions, but
shoud work in the upcoming ghc-5.0. You might need to remove '| a b -> c'
below and need more explicit type annotations (will not be very
convenient).

class Plus a b c | a b -> c where
    (\+) :: a -> b -> c

instance Plus CF CF CF where
    f \+ g = ...

instance Plus IF IF IF where
    f \+ g = ...

instance Plus CF IF CIF where
    f \+ g = ...

instance Plus IF CF CIF where
    f \+ g = ...

instance Plus CF CIF CIF where
    f \+ g = ...

instance Plus IF CIF CIF where
    f \+ g = ...

instance Plus CIF CF CIF where
    f \+ g = ...

instance Plus CIF IF CIF where
    f \+ g = ...

instance Plus CIF CIF CIF where
    f \+ g = ...

-- 
Marcin 'Qrczak' Kowalczyk