Haskell的Monad变换器在范畴论术语中是什么?

32
作为一名数学学生,当我在学习Haskell中的单子时,第一件事就是检查它们是否真的是我所知道的意义上的单子。但后来我了解了单子变换器,它们似乎并不是范畴论研究的内容。
特别地,我希望它们与分配律相关,但它们似乎确实有所不同:单子变换器预期适用于任意单子,而分配律则涉及一个单子和另一个指定的单子之间的关系。
此外,看着单子变换器的常见示例,虽然MaybeT m m Maybe 组合,但StateT m 在任何一种顺序中都不是 m State 的组合。
那么我的问题是:什么是范畴语言中的单子变换器?

4
据说C语言中的单子变换器是Monad(C)上的指向端函子(又称预单子)。尽管如此,我不确定我理解这个定义。也许你理解?如果是,请分享一下 ;) - n. m.
3
这篇文章看起来是个不错的开始。 - hammar
2
解包“Monad(C)上的指向函子”,你会发现一个单子变换器t是这样的东西:(1)对于每个单子m,它给出一个单子tm;(2)对于每个单子态射m->n,它以函子方式(即,尊重组合)给出另一个单子态射tm->tn,并且t伴随着(3)对于任何单子m,一个自然的单子态射m->tm(即,对于单子态射,你得到的明显正方形的顶点为m、n、tm、tn)。(Monad(C)上的Endofunctor是(1)和(2),pointed是(3)。) - Omar Antolín-Camarena
哦,所有这些都在Hammar的链接中解释了!(包括我使用但未定义的单子态射术语。) - Omar Antolín-Camarena
3
好的,我认为Hammar提供的文章回答了我的问题:在Haskell编程中,单子变换器只需要将单子发送到单子,并允许提升单子的额外操作。因此,它们只是从单子集合到自身的 函数,甚至不是 Monad(Hask)上的内部函子,尽管在实践中,除了ContT之外的所有有用的单子变换器都是函子。如果您将链接作为答案发布,Hammar,我会很高兴接受它。 - Omar Antolín-Camarena
2
@Omar:我建议你将那个评论扩展成自己问题的答案,这样做没有任何问题。只要确保它是自包含的,即添加hammars的链接 =D。 - HaskellElephant
3个回答

8

这篇论文并没有讨论单子变换器(除了简短提及),所以我不会说它回答了我的问题,但它很有趣,感谢你指出来! - Omar Antolín-Camarena
1
只要你限制自己在理想单子的宇宙中,它确实可以让你以正式、明确定义和愉悦的方式获取单子变换器。 - sclv
2
没错(对于那些没有读过sclv论文的人来说,它意味着对于任何理想单子m,您可以获得将单子n发送到m和n的余积(在单子类别中)的单子变换器,并且它也有一个很好的构造),但是我的意思是,尽管它提供了这些单子变换器的示例,但它并没有讨论单子变换器的定义。 - Omar Antolín-Camarena

3
用范畴论计算单子变换器是另一篇关于单子变换器的文章,将该概念与范畴论中重要的伴随概念相关联。
此外,它使用了我认为最令人愉悦的范畴论特性,即图追踪,这使得概念更加自然。
希望这可以帮到您。

0

Monad transformer是单子范畴中的一个指向函子。

以下是更多细节:

从某个范畴开始,我们考虑那些是单子的自函子M。所有这些单子M形成一个范畴,其态射是满足单子态射定律的自然变换M -> M'。

在这个单子范畴中,Monad transformer是一个指向自函子。什么是单子范畴中的自函子T?这个自函子是从单子M到单子T(M)的映射,以及任何单子态射M -> M'到单子态射T(M) -> T(M')的映射。

如果存在从恒等自函子(Id)到T的自然变换,则自函子T是“指向”的。

身份函子是单子和单子态射的恒等映射。自然变换Id ~> T由其在所有单子M的分量定义。它在M处的分量是一个单子态射M -> T(M)。此外,必须有一个自然性定律(“单子自然性”),它表明对于任何单子M和M'以及任何单子态射M -> M',由M、M'、T(M)、T(M')组成的图表都是可交换的。

这些数据或多或少与单子变换器所需的通常数据重合。所需的单子态射M -> T(M)是将“外部”单子M提升到转换后的单子中。

构造还包括“举起”函数(这是端函子T对单子态射的作用),它将单子态射M -> M'提升为T(M) -> T(M')。

如果我们考虑单位自函子 T(Id) 的图像,这必须是另一个单子。将其称为变换器的“基础单子”并用 B 表示。然后,对于任何 M,我们有单子态射 B ~> T(M)。这是从基础单子到转换单子的提升。

然而,此定义排除了“非函子”的单子变换器,例如连续单子和密度单子。

分配律仅与某些单子变换器相关。存在两种类型的变压器,在这些变压器中,自然变换 Id ~> T 的 M 分量由 M -> B∘M 或 M ->M∘B 给出。但其他单子具有不是函子组合的变形器,并且对它们没有分配法则。

更多详细信息请参见即将推出的书籍《函数式编程科学》的第14章:https://github.com/winitzki/sofp


这与@hammar的答案相同10年前 - Omar Antolín-Camarena

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接