У меня определены следующие структуры данных:
data Operator = Plus | Times | Minus deriving (Eq,Show)
data Variable = A | B | C deriving (Eq,Show)
newtype Const = D Numeral deriving (Eq,Show)
data CVO = Const | Variable | Operator deriving (Eq,Show)
type Expr = [CVO]
Я определил следующую функцию:
eval2 :: Expr -> Integer
eval2 x = helper x
Я хотел бы проверить, является ли элемент списка CVO (Expr) экземпляром Const, Variable или Operator (это работает), и я хотел бы реализовать меняющийся код для определенного типа экземпляра (например, Plus, Times, Минус за оператора).
helper :: Expr -> Integer
helper [] = 2
helper (x:xs)
| x == Operator && x == Plus = 1
Я не могу сравнивать x с Plus, потому что он ожидает, что x будет типа CVO.
Couldn't match expected type ‘CVO’ with actual type ‘Operator’
Можно ли каким-то образом привести x к экземпляру Operator, чтобы выполнить сравнение?