У меня есть следующие типы алгебраических данных:
data Exp
= Con Int
| Var String
| Op Opkind Exp Exp
| Input
deriving (Show,Eq)
data Opkind
= Plus | Minus | Mult | Div | More | Equal
deriving (Show,Eq)
Это выражения в простом языке игрушек.
Однако, поскольку я получаю Eq, Op Plus (Var "a") (Var "b) не считается равным Op Plus (Var "b") (Var "a"), хотя я бы хотел рассматривать a+b как равное выражение для b+a.
Как мне изменить (==) только для этих экземпляров, не указывая поведение (==) для всех остальных экземпляров?