haskell - 更普遍背景下的自然转变

标签 haskell functor category-theory

我一直在通过 Haskell 中的一些范畴论来构建自己的方法,以创建更通用的 Monad。

在进入下一步之前,我需要能够使用自然转换。

现在常规仿函数上的自然转换非常简单,它们只是函数

trans :: forall a . F a -> G a

(其中 FGFunctor),附加限制为

fmap f . trans = trans . fmap f

等价于交换图:

commutative diagram

但是当我转向更多的分类仿函数时

class
  ( Category cat1
  , Category cat2
  )
    => Functor cat1 cat2 f
  where
    map :: cat1 a b -> cat2 (f a) (f b)

我不确定如何增强自然变换的定义以跟上。

该图表明

trans :: forall a . cat2 (F a) (G a)

哪里

Functor cat1  cat2 F
Functor cat1' cat2 G

但是我不清楚是否一定是cat1 ~ cat1'。或者两个仿函数的变换和预范畴之间的关系是什么。

在更广泛的 Haskell Functor 背景下,在更一般的类别上,自然转换是什么样的?

最佳答案

However it is not clear to me that it must be the case that cat1 ~ cat1'.

仿函数 F 和 G 具有相同的域和余域,这是自然变换定义的一部分。 From nlab :

Given categories C and D, and functors F, G : C -> D

因此,Haskell 中定义的直接翻译是,具有域 cat1 和余域 cat2 的仿函数 F, G 之间的自然变换是作为多态项,由对象 a 索引的态射族 cat2 (F a) (G a):

n :: forall a. cat2 (F a) (G a)

这样某个图对于所有 f::cat1 a b 都是可交换的,即,我们有以下等式,其中 (.)cat2 中的组合:

fmap f . n = n . fmap f

其中 n 专门用于左侧的类型 a 和右侧的类型 b

请注意,这种编码的表达能力有限,因为 Haskell forall 与英语的“for all”不同。 n::forall a 的行为。 ... 不能真正依赖于 aforall 暗示了一种“均匀性”(又名参数性)的形式,这在“自然变换”的定义中是找不到的。

关于haskell - 更普遍背景下的自然转变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62106430/

相关文章:

haskell - 转置嵌套数据结构

红黑树的 Haskell 仿函数

haskell - 我可以将这个新类型实现为其他类型的组合吗?

haskell - Functor's Product 和 Coproduct 的有用应用

haskell - 实例声明的RankNTypes?

algorithm - 找到满足给定 f 的属性的最大 f 在其参数中是非递减的

c++ - set 和 compering/sorting functor 或 less 运算符

haskell - Haskell中的`(a -> b) -> (c -> d)`?

haskell - 如何阅读haskell类型签名?

ruby - 这是什么镜头组合器?