Haskell子类的解释

时间:2014-12-28 22:02:45

标签: haskell typeclass

子类关系与一个类的方法可以使用其他类型类的方法实现的事实之间的关系是什么?

例如,定义Applicative之类的class Functor a => Applicative a非常令人困惑,因为这会强制您添加Functor实例,然后才能添加Applicative但是,您可以编写一个像instance Applicative a => Functor a这样的实例声明来确保每个Applicative也是Functor

使用该方法背后的原因是什么?并且,正如我所说,如果超类可以使用子类实例化,那么一个类型类是另一个超类的规则吗?

1 个答案:

答案 0 :(得分:2)

这不是一个子类,而是一个类限制。在类声明中,这通常表明默认的多态操作使用来自该类型类的多态操作,尽管这是一个例外。

在这里,这并不重要,只是强加的限制,但它确实意味着作为Applicatve实例意味着对象也是Functor实例,允许{{1}无忧无虑地使用。我们如何操纵其中的值?

请记住,Haskell的典型性只是描述多态值的方法:它等同于面向对象的结构。

如果您想查看实际的声明,可以找到<$>的来源here