【发布时间】:2021-07-07 17:25:48
【问题描述】:
我有这个计算加法的函数
data Expr
= Num Double
| Add Expr Expr
| Sub Expr Expr
deriving (Show)
eval :: Expr -> Maybe Double
eval (Num a) = if a < 0 then
eval (Add a b) = case eval a
Nothing -> Nothing
Just a1 -> case eval b of
Nothing -> Nothing
Just b1 -> Just (a1 + b1)
这样调用它时,它返回错误:
求值加(Expr(1), Expr(2))
:30:20: 错误: 数据构造函数不在范围内:Expr :: t1 -> b0
【问题讨论】:
-
如果
a < 0,eval (Num a)是否应该返回Nothing?否则(除非您打算稍后添加除法),我看不出有任何理由使用Maybe Double作为返回类型而不是Double。