我總是碰到一個錯誤,但無法理解如何使它正確。這給了我這個錯誤的代碼示例:Haskell類的錯誤我一直都在跌倒,無法理解
class Someclass a where
somefunc :: (Num b) => b -> a -> a
data Sometype = Somecons Int
instance Someclass Sometype where
somefunc x (Somecons y) = Somecons (x+y)
的錯誤信息是:
無法比擬預期的「B」型反推斷類型「詮釋」
「B」是(')'的第二個參數,即'y'
在'Somecons'的第一個參數中,'somefunc'的類型簽名位於error.hs:3:21
'即'(x + y)'
在expr ession:Somecons
據我所知,錯誤消息試圖告訴我,我使用了一個類型爲Int的名稱,他期望類型爲(Num b)=> b。我無法理解的是Int符合(Num b)=> b。編譯器不應該明白我告訴他什麼(對於這個具體的例子,b應該是一個整數?我怎樣才能使這個合適?
coment: 當然在這個特定的例子中,我可以做一些事情類型簽名:
somefunc :: a -> a-> a
但supose我想是這樣的:。
data Newtype = Newcons (Int, Int)
instance Someclass Newtype where
somefunc x (Newtype (y,z)) = Newtype (y+x, z)
事情是這樣的,當我試圖做一些事情在Haskell反覆發生
呵呵......我想你的意思是'data ...'而不是'Data ...' – 2009-11-21 21:16:07
是的,當然。感謝您的更正。 – 2009-11-21 21:45:31