2014-10-27 89 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