如何在ghci中调用具有特定数据结构的函数

我有这个计算加法的函数

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

回答

Add (Expr(1), Expr(2))的不是Expr. 首先,您需要Num构造 an Expr,而不是 anExpr因为它是类型构造函数,而不是数据构造函数

Add (Num 1) (Num 2)

此外,两者之间应该有逗号,我们需要括号来传递整个Expr我们需要的括号围绕整个Add …块,所以:

eval (Add (Num 1) (Num 2))

在您的eval函数中,在if a < 0 then …

您还可以实现eval (Add a b)为:

eval :: Expr -> Maybe Double
eval (Num a) = if a < 0 then … else …
eval (Add a b) = (+) <$> eval a <*> eval b


以上是如何在ghci中调用具有特定数据结构的函数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>