haskell - 所有 Haskell 仿函数都是内仿函数吗?

标签 haskell functor category-theory

我有点困惑,需要有人来纠正我。让我们概述一下我目前的理解:

在哪里 E是一个内仿函数,A是一些类别:

E : A -> A.

由于 Haskell 中的所有类型和态射都在 Hask类别,不是任何仿函数 在 Haskell 中还有一个 内仿函数 ? F : Hask -> Hask .

我有一种很好的感觉,我错了,并且以某种方式过度简化了这一点,我希望有人告诉我我是多么的白痴。谢谢。

最佳答案

您可能想澄清您是在询问“Haskell 中的仿函数”,还是 Functor s。当在 Haskell 中使用类别理论术语时,并不总是很清楚所假设的类别。

但是,是的,默认假设是 哈斯克 ,它被认为是具有态射函数的 Haskell 类型的范畴。在这种情况下, 上的内仿函数 F哈斯克将任何类型 A 映射到类型 F(A) 并将两个类型 A 和 B 之间的任何函数 f 映射到某些类型 F(A) 和 F(B) 之间的函数 F(f)。

如果我们将自己限制为仅映射任何类型 a 的那些内仿函数到类型 (f a)在哪里 f是一个类型构造函数,类型为 * -> * ,那么我们可以将函数的关联映射描述为类型为 (a -> b) -> (f a -> f b) 的高阶函数,当然是类型类,叫做 Functor .

然而,人们很容易想象 上表现良好的内仿函数。哈斯克不能(直接)写为 Functor 的实例,例如映射类型 a 的仿函数至Either a t .虽然 中的仿函数显然没有多大意义哈斯克完全到其他类别,考虑 中的(逆变)仿函数是合理的。哈斯克哈斯克同上。

除此之外,Functor 的实例必须从整个类别中映射哈斯克到它的某个子集上,因此也形成了一个类别。但是谈论 的子集之间的仿函数也是合理的。哈斯克 .例如,考虑一个发送类型 Maybe a 的仿函数。至[a] .

您不妨细读 category-extras package ,它提供了一些嵌入在 中的类别理论启发的结构。哈斯克而不是假设全部。

关于haskell - 所有 Haskell 仿函数都是内仿函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3273373/

相关文章:

haskell - GHC的语言扩展: "Arrows"?的源代码在哪里

c++ - priority_queue 的仿函数和函数以及某种 C++

haskell - 这是对任意 ADT 的 `scan` 的有意义的概括吗?

haskell - 玫瑰树的初始代数

haskell - 元组函数的 N 元版本

haskell - 出现歧义 '=='

coding-style - 您是否将名词用于表示可调用对象的类名?

haskell - 有选择地包装类实例的正确方法(或 "lift"函数,如 `sortBy` 、 `minimumBy` ……自动)

haskell - 如何检索 Haskell 执行的外部程序的输出?

c++ - 有没有办法从同一个类中的仿函数调用类方法?