在haskell中调用数据类型的函数

时间:2014-10-27 03:16:09

标签: haskell

我该怎么称呼这个东西?

data Poly' = Lit Integer |
             Add Poly' Poly' |
             Sub Poly' Poly'

eval::Poly'->Integer
eval (Lit n)     = n
eval (Add p1 p2) = (eval p1) + (eval p2)
eval (Sub p1 p2) = (eval p1) - (eval p2)

我正在尝试这个,但它不起作用:

main = do
print(eval Add(2 3))

2 个答案:

答案 0 :(得分:6)

尝试main = print . eval $ Add (Lit 2) (Lit 3)

您对parens的使用表明您不太了解haskell功能应用程序。你几乎不应该写a(b c),因为它真的a (b c),即a $ b c,而前者看起来更像C函数应用程序,它肯定不是。

答案 1 :(得分:1)

我很确定你的问题是,添加需要两个Poly,不幸的是你用int而不是Poly来调用它。 Lit 2是Poly',2是int。