Поскольку у вас есть Eq
и Ord
, вы можете сделать следующее:
data Ternary = T | F | M
deriving (Eq, Show, Ord)
(<=>) :: Ternary -> Ternary -> Ternary
x <=> y = if x == y then T else max x y
Если вам случится изменить его так, чтобы M <=> M == M
, то вы можете сделать следующее:
data Ternary = M | T | F
deriving (Eq, Show, Ord, Enum)
(<=>) :: Ternary -> Ternary -> Ternary
x <=> y = fromEnum $ rem (toEnum x * toEnum y) 3