2016-07-18 25 views
1

我試圖以列表形式(例如[3,2,1]是3x^2 + 2x + 1 )並對其進行評估,方法是對多項式執行apply操作,並對x執行一個數字操作。多項式將被評估爲x。預期類型,但'數字'有種'GHC.Prim.Constraint'

這是我的代碼:

newtype Poly a = P [a] 

apply :: Num a => Poly a -> Num a -> Num a 
apply (P p) x = if (i > 0) then (x * ((head p)^i)) + (apply (P (tail p)) x) else p 
    where i = length p 

問題是,當我嘗試編譯這段代碼,我得到的是我不明白的錯誤:

預計有型,而是「民」具有一種 'GHC.Prim.Constraint'
在類型簽名 '應用':
申請:: NUM A =>保利一 - > NUM A - >民一

回答

7

當你寫

apply :: Num a => Poly a -> Num a -> Num a 

Num a的第一個實例是一種約束,這意味着該類型a必須符合Num類型類。但是,一旦您指定了該約束,您就不需要再次這樣做。您遇到的問題是您在此線路上多次使用約束Num a,您應該只使用類型a。將apply的類型更改爲以下內容:

apply :: Num a => Poly a -> a -> a 
+0

謝謝你,就是這樣!,我不接受它的時候允許我 –

相關問題