haskell - "function inside a functor"到底是什么意思

标签 haskell category-theory

在范畴论中仿函数是两个范畴之间的同态。在 Haskell 中,据说应用仿函数允许我们在“仿函数内部”应用函数。人们能否将“仿函数内的函数”这句话翻译回数学或给出一些其他见解? (我知道仿函数可以是 Maybe[] 等,但仍然很难理解这个概念。)

最佳答案

我的范畴论一点也不强(我是从Haskell的编程方面开始的,最近一直在尝试学习它的一些概念的一些范畴论基础)。但这是我所得到的:

在 Haskell 中,仿函数是类型构造函数,这意味着它从一般类型映射到“仿函数中的类型”。

在范畴论中,仿函数从一个类别的对象映射到另一个类别的对象。

将范畴论应用于 Haskell 时,我们想象我们正在使用范畴 Hask,即 Haskell 类型的范畴。

所以 Haskell 仿函数不是一般范畴论仿函数;它们都从 Hask 映射到 Hask 的子类别(因为某些仿函数 f 的类型 f a 和任意类型a仍然是Haskell类型)。例如,Maybe 仿函数将 Hask 中的对象(类型)映射到 Maybe a 形式的类型类别。

函数在 Haskell 中是一流的,因此函数类型是完全普通的类型(并且是 Hask 的对象),因此仿函数将函数类型映射到“函数类型”仿函数”。因此,短语“仿函数内的函数”是将仿函数应用于函数类型而产生的类型中的的简写。例如Just (+1)Maybe (Int -> Int) 类型中的一个特定值,它是 Maybe 所指向的对象(类型) code> 仿函数映射对象 Int -> Int

因此,“应用仿函数”是一个具有一些额外规则的仿函数,这些规则足以获取值,这些值是仿函数“目标”类别的对象类型中的函数,并应用这些值值到目标类别中类型中的其他值。

再次使用Maybe作为例子,如果我们只知道它是一个仿函数,它为我们提供了对象Int -> CharMaybe之间的对应关系( Int -> Char),以及对象 IntMaybe Int 之间,以及对象 CharMaybe 之间字符。但是,虽然我们能够获取 Int -> Char 中的值和 Int 中的值并生成 Char 中的值,Maybe 作为仿函数并不能保证我们有能力使用 Maybe (Int -> Char) 中的值和 Maybe Int 中的值执行某些相应的操作.

当我们也知道它是一个应用仿函数时,我们就有能力获取 Maybe (Int -> Char) 中的值和 Maybe Int 中的值并在 Maybe Char 中生成一个值,这满足将 Int -> Char 值应用到 Int 值时的某些属性。

据我所知,从纯范畴论的角度来看,应用仿函数并不是很有趣。也许这是因为范畴论关注对象之间的关系,这些对象对应于 Haskell 中的类型,但从编程的角度来看,应用仿函数是由这些类型中的值之间的关系驱动的? (我们希望使用仿函数获得的“函数类型”中的值仍然能够应用于事物进行计算)。

关于haskell - "function inside a functor"到底是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13753454/

相关文章:

haskell - 我们可以抽象类型类吗?

haskell - 使用模板 Haskell 时键入同义词 "not in scope"

haskell - 对非参数化数据类型使用加号运算符

haskell - Haskell 中 Zap Functor 和 zap 函数的目的是什么?

haskell - Applicative/Monad 实例在多大程度上是唯一确定的?

haskell - "lax"在 "lax monoidal functor"中是什么意思?

haskell - 如何根据另一个字段验证一个字段?

haskell - 如果尚未在特定工作区启动应用程序,则在该工作区启动应用程序

haskell - 为什么单子(monad)转换器与堆叠单子(monad)不同?

scala - 以功能方式进行多个 API 调用