我总是碰到一个错误,但无法理解如何使它正确。这给了我这个错误的代码示例: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