2014-10-27 91 views
-1

我该如何从main调用这些东西?在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)) 
+0

那它不起作用呢?你得到什么样的错误信息? – stonemetal 2014-10-27 03:25:25

+0

让我们从头开始:表达式'2 3'没有意义。 – 2014-10-27 03:33:04

+0

对于所有经过倒票的人,上面的所有代码都是我自己的代码。就像fyi一样。 – 2014-10-27 08:42:16

回答

1

我敢肯定你的问题是,添加需要两个保利不幸的是你与整数调用它并不保利。 Lit 2是Poly,2是int。

6

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

您使用括号表明你不太了解的Haskell功能的应用。你几乎不应该写a(b c),因为它真的是a (b c),也就是a $ b c,而前者看起来更像是C函数应用程序,它当然不是。

+0

另外'Poly''需要一个'Show'实例,对吧? – 2014-10-27 03:34:03

+0

@Chris Martin是的 – alternative 2014-10-27 13:10:06