子类关系与一个类的方法可以使用其他类型类的方法实现这一事实之间有什么关系?
例如,定义像 class Functor a => Applicative a
这样的 Applicative
非常令人困惑,因为这会迫使您添加 Functor
> 实例,然后才能添加 Applicative
实例,但是,您可以编写一个实例声明,例如 instance Applicative a => Functor a
这将确保每个 Applicative
也是一个仿函数
。
所使用方法背后的原因是什么?而且,正如我所说,一个类型类是另一个类型类的父类(super class),前提是该父类(super class)可以使用子类实例化,这是一条规则吗?
最佳答案
这本身并不是一个子类,而是一个类限制。在类声明中,这通常表示默认多态操作使用该类型类中的多态操作,尽管这是一个异常(exception)。
在这里,这并不重要,只是施加的限制,但它确实意味着成为 Applicatve
实例意味着一个对象也是一个 Functor
例如,允许 <$>
使用无忧。我们还能如何操纵其中的值?
请记住,Haskell 典型性只是描述多态值的方式:它不等同于面向对象的结构。
Control.Applicative
的来源可以查到here ,如果你想看一下实际的声明。
关于haskell - Haskell子类的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27681027/