{-# LANGUAGE MultiParamTypeClasses, InstanceSigs #-}
module Mdk where
data C a b = Ab a b | Ba b a
class Mdk a b where
mdk::a -> b -> C a b
instance (Eq a, Eq b) => Eq (C a b) where
(==)::C a b -> C a b -> Bool
(==) (Ab a1 b1) (Ab a2 b2) = a1 == a2 && b1 == b2
(==) (Ab a1 b1) (Ba b2 a2) = a1 == a2 && b1 == b2
(==) (Ba b2 a2) (Ab a1 b1) = a1 == a2 && b1 == b2
(==) (Ba b2 a2) (Ba b1 a1) = a1 == a2 && b1 == b2
?