如何在Haskell中正确实例化类?

时间:2010-02-19 22:05:26

标签: haskell typeclass

尝试创建一个基类,我可以从中派生出不同的类型。以下是什么问题?

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.

3 个答案:

答案 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接口不同,这些函数可以相互定义,因此最小化完成的实例声明可能只需要定义一些函数。