什么是Haskell的monad变换器的分类术语?

时间:2011-07-28 05:01:29

标签: haskell monad-transformers category-theory

作为一名数学学生,我在Haskell学习monads时所做的第一件事就是检查他们确实是我所知道的monad。但后来我了解了monad变换器,而那些似乎并不是类别理论研究的东西。

特别是我希望它们与分配法有关,但它们似乎真正不同:monad变换器预计适用于任意monad,而分配法则是monad和特定其他monad之间的事情。

另外,查看monad变换器的常见示例,MaybeT m mMaybe一起构成,StateT m不是m State的组合{ {1}}按任意顺序排列。

所以我的问题是分类语言中的monad变换器是什么?

3 个答案:

答案 0 :(得分:8)

Monad变压器在数学上并不十分令人愉悦。但是,我们可以从免费的monad中获得好的(co)产品,更常见的是理想的monad:参见Ghani和Uustalu的“理想Monads的副产品”:http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.2698

答案 1 :(得分:3)

Calculating monad transformers with category theory by Oleksandr Manzyuk是关于Monad变换器的另一篇文章,并将该概念与类别理论中 adjunction 的重要概念联系起来。
在我看来,它也使用了类别理论中最令人愉快的特征,即图表追逐,其中自然化概念。
希望这会有所帮助。

答案 2 :(得分:0)

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

以下是更多详细信息:

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

monad 转换器是此类 monad 中的一个尖头内函子。什么是此类 monad 中的内函子 T?这个自函子是从 monad M 到 monad T(M) 的映射,以及任何 monad 态射 M -> M' 到 monad 态射 T(M) -> T(M') 的映射。

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

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

此数据或多或少与 monad 转换器所需的通常数据一致。所需的单子态射 M -> T(M) 是将“外来”单子 M 提升为转换后的单子。

该构造还包括“提升”函数(这是自函子 T 对 monad 态射的作用),它将 monad 态射 M -> M' 提升到 T(M) -> T(M')。

如果我们考虑身份 monad 的图像,T(Id),这一定是其他一些 monad。称其为变换器的“基础单子”并用 B 表示。然后我们有任何 M 的单子态射 B ~> T(M)。这是从基础单子到变换单子的提升。

然而,这个定义不包括“非函子”的单子变换器,例如延续单子和共密度单子的变换器。

分配律仅与某些 monad 转换器相关。存在两种分布规律的变压器:对于这些变压器,自然变换 Id ~> T 在 M 处的分量由 M -> B∘M 或 M ->M∘B 给出。但是其他 monad 具有不是函子组合的转换器,并且它们没有分配定律。

更多细节在即将出版的书“函数式编程的科学”的第 14 章中写到:https://github.com/winitzki/sofp