我正在实现一个表达式求解器,但我在模式匹配方面遇到了一些问题。我有以下代码
data Expression a where
Const ∷ Int → Expression Int
Add ∷ Expression Int → Expression Int → Expression Int
Sub ∷ Expression Int → Expression Int → Expression Int
eval ∷ Expression a → a
eval (Const a) = a
eval (Add exp1 exp2) = (val1 + val2)
where
val1 = eval exp1
val2 = eval exp2
eval (Sub exp1 exp2) = (val1 - val2)
where
val1 = eval exp1
val2 = eval exp2
但是由于 eval Add 和 eval Sub 非常相似,我可能想要另一个操作,我虽然做一个更通用的实现,但我遇到了一些问题。我虽然喜欢
data Op = Add | Sub
data Expression a where
Const ∷ Int → Expression Int
Op ∷ Expression Int → Expression Int → Expression Int
eval (Op exp1 exp2) = case Op of
Add → (val1 + val2)
Sub → (val1 - val2)
where
val1 = eval exp1
val2 = eval exp2
但它不起作用。有可能做这样的事情吗?提前致谢