31

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

特别是我希望它们与分配律有关,但它们似乎真的不同:单子转换器预计适用于任意单子,而分配律是单子与特定其他单子之间的事务。

此外,查看 monad 转换器的常见示例,虽然MaybeT mm组合Maybe,但StateT m不是mwith的组合State

所以我的问题是分类语言中的单子转换器是什么?

4

3 回答 3

8

Monad 转换器在数学上并不是非常令人愉快。然而,我们可以从免费的单子中得到很好的(共)产品,更一般地说,是理想的单子:参见 Ghani 和 Uustalu 的“理想单子的共产品”:http ://citeseerx.ist.psu.edu/viewdoc/summary?doi =10.1.1.4.2698

于 2011-07-28T09:09:45.880 回答
3

Oleksandr Manzyuk范畴论计算 monad 变换器是另一篇关于 Monad 变换器的文章,并将概念与范畴论中的重要附加概念联系起来。
在我看来,它还使用了类别理论中最令人愉快的特性,即图表追逐,这使这个概念更加自然化。
希望这可以帮助。

于 2015-02-23T16:26:37.180 回答
0

单子转换器是单子类别中的一个尖的内函子。“有什么问题?

以下是更多细节:

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

monad 转换器是这类 monad 中的一个尖的内函子。这类单子中的内函子 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') 通勤。

该数据或多或少与 monad 转换器所需的通常数据一致。所需的单子态射 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

于 2021-05-19T10:11:28.797 回答