什么是哈斯克尔的单体变压器?



作为一名数学学生,当我了解Haskell中的单子时,我做的第一件事就是检查它们是否真的是我所知道的意义上的单子。但后来我了解了单轴变压器,而这似乎不是范畴论研究的内容。

特别地,我希望它们与分配律有关,但它们似乎是真正不同的:一个单子变换被期望应用于任意单子,而分配律是单子和特定的其他单子之间的事务。

此外,看看单极变压器的常见示例,虽然MaybeT mmMaybe组成,但StateT m不是mState的组合。

我的问题是什么是范畴语言中的单子变换?

单子式变压器在数学上并不十分令人愉快。然而,我们可以从自由单体中得到好的(co)产品,更一般地说,理想单体:参见Ghani和Uustalu的"理想单体的协产品":http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.2698

用范畴论计算monad变压器 by Oleksandr Manzyuk是另一篇关于monad变压器的文章,并将该概念与范畴论中的重要概念附加联系起来。
在我看来,它还使用了范畴理论中最令人愉快的特征,即图追踪,这使概念非常自然。

单子变换器是单子类中的点内函子。

这里有更多的细节:

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

单子变换是这类单子中的一个点内函子。什么是单分子的内函子T ?这个内函子是从单态M到单态T(M)的映射,以及任意单态M -&gt的映射;M'变成单态T(M) ->T (M)。

内函子T是"指向"的。如果存在从单位内函子(Id)到t的自然变换

恒等内函子是单子和单子态的恒等映射。自然变换Id ~>T是由它在所有单态M上的分量定义的,它在M上的分量是一个单态M ->T (M)。此外,必须有一个自然性定律("一元自然性"),它表明,对于任何单子M和M'以及任何单子形态M ->M',由M, M', T(M), T(M')通勤组成的图。

该数据或多或少与单极变压器所需的通常数据一致。所需的单态M ->T(M)是"洋"字的提法。将monad M转换为转换后的monad。

施工还包括"吊装";函数(这是内函子T对单态的作用),它提升单态M ->M' to T(M) ->T (M)。

如果我们考虑单位单子的像T(Id),它一定是另一个单子。将其称为"基础单元"。用B表示,我们得到单态B ~>T(M)对于任意M,这是从基本单子到变换单子的提升。

然而,这个定义排除了"非功能性"。单轴变压器,如连续单轴变压器和共密单轴变压器。

分配律只适用于某些单相变压器。存在分配律的变压器有两种:对这两种变压器,自然变换的M处分量Id ~>T由M -&gt给出;B°M或由M ->M°B。但是其他单子的变换不是函子组合,它们没有分配律。

更多细节将在即将出版的《函数式编程科学》第14章中详细介绍:https://github.com/winitzki/sofp

最新更新