尝试创建一个基类,我可以从中派生出不同的类型。以下是什么问题?
class (Eq a) => MyClass a
data Alpha = Alpha
instance MyClass Alpha where
Alpha == Alpha = True
我收到错误:
test.hs:5:10: `==' is not a (visible) method of class `MyClass'
Failed, modules loaded: none.
答案 0 :(得分:8)
你必须明确地使Alpha成为Eq的一个实例。这将有效:
data Alpha = Alpha
instance Eq Alpha where
Alpha == Alpha = True
instance MyClass Alpha
答案 1 :(得分:2)
第一行表示你需要首先声明Alpha是Eq的实例,然后是MyClass的实例。
答案 2 :(得分:1)
基于问题的结构,您似乎期望Haskell类型类的行为方式与面向对象语言中的类相似。类型类更像Java接口。
没有继承权。类型类只是对一个类型实现的一组函数的描述。与Java接口不同,这些函数可以相互定义,因此最小化完成的实例声明可能只需要定义一些函数。