Я определил AlgebraicDataType и его экземпляр:
data Expr = const(int n)
| var(str name)
| add(Expr lhs, Expr rhs)
| mult(Expr lhs, Expr rhs)
;
Мне нужно логическое значение, указывающее, имеет ли данный экземпляр тип add
:
isAdd(add(var("x"), const(3))); // true
isAdd(var("x")); // false
isAdd(const(3)); // false
isAdd(mult(var("x"), const(3))); //false
Возможно, существует встроенная функция или оператор, который был бы более общим c решением, чем:
bool isAdd(add(Expr lhs, Expr rhs)) = true;
bool isAdd(Expr e) = false;