作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,当我编译以下代码时:
instance (Eq a) => PartOrd a where
[] == [] = True
(x:xs) == (y:ys) = x==y && xs==ys
_ == _ = False
xs /= ys = not (xs == ys)
`==' is not a (visible) method of class 'PartOrd'
`/=' is not a (visible) method of class 'PartOrd'
Failed, modules loaded: none.
=~
的
==
和
/~
的
/=
的自定义运算符时,是否会出现相同的错误?
class Eq a => PartOrd a where
partcmp :: a -> a -> Maybe Ordering
partcmp x y = case bigger x y of
True -> Just LT
False -> case smaller x y of
True -> Just GT
False -> case x == y of
True -> Just EQ
False -> Nothing
最佳答案
目前尚不清楚您要实现的目标。这里有一些想法:
instance (Eq a) => PartOrd a
的类的实例时,应提供PartOrd a
中的功能实现(即partcmp
,而不是==
和/=
)。编译器确切地告诉您:==
和/=
在Eq
类中,不在PartOrd
中,并且您没有在PartOrd
中进行的业务定义函数。实际上,无论您使用==
,=~
还是/~
,问题依然存在:您不应该在partcmp
中定义除instance (Eq a) => PartOrd a
之外的任何内容。 (Eq a) =>
部分只是说,在这些定义中,您可以假定已定义类型为==
的函数/=
和(==), (/=) :: a -> a -> a
。 instance (Eq a) => PartOrd [a]
?如果您真的想说instance (Eq a) => PartOrd a
,则需要在GHC中打开FlexibleInstances
(也许还有更多其他功能...)。 (但是,使用instance (Eq a) => PartOrd a
并没有任何意义。)bigger
和smaller
来自何处?您不能在class (Eq a) => PartOrd a
中使用它们,因为a
是常规类型。您将需要函数bigger, smaller :: a -> a -> a
,在这种情况下,您甚至根本不需要PartOrd
类。 关于haskell - Haskell : `==' is not a (visible) method of class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30967119/
我是一名优秀的程序员,十分优秀!