haskell - Haskell子类的解释

标签 haskell typeclass

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

例如,定义像 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/

相关文章:

haskell - 用仿函数和非仿函数定义一个类

list - 无限列表的交集

monads - 在 Coq 中定义 Maybe monad

haskell - Haskell 中类型类实例的类型约束?

haskell - "where"关键字是懒惰的吗?

haskell - 与 Alternative empty 或 Applicative pure 的模式匹配

haskell - 类型类实例检查检测不到 "piecewise instances"

file - Haskell:编写文本文件并将其解析回原始格式

sql - 列表的内存中完全外部连接

haskell - 是否可以? : Behavior t [Behavior t a] -> Behavior t [a]