注意,这个问题不是关于“自函子范畴中的幺半群”的。它也不是直接涉及到Functor(Monad始终是Functor,但这个问题主要关注于monad transformers)。
docs 中关于 Haskell 的 SelectT
monad transformer 的说明是:
SelectT
不是单子范畴上的函子,许多操作不能通过它进行提升。
- 什么是单子范畴?该范畴中的箭头是什么?
- 为什么一些单子变换器在单子范畴上是函子(例如
MaybeT
、RWST
等),但有些不是(例如ContT
、SelectT
)? - 从编程角度来看,在单子范畴上成为函子有什么好处?作为库的使用者,我应该关心什么?
IO String
转换为MaybeT IO String
很容易,但无法将IO String
转换为SelectT <任何类型> IO String
。 - user253751