У меня есть следующие типы алгебраических данных:
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
.
Как мне изменить (==)
только для этих экземпляров, не указывая поведение (==)
для всех остальных экземпляров?