would this work:

{-# 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

​?