单子转换器是单子类别中的一个尖的内函子。“有什么问题? ”
以下是更多细节:
从某个类别开始,我们在其中考虑那些作为单子的内函子 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