added a remark (here) that the previous discussion establishes a covariant functor from monads to their Kleisli categories.

This deserves to be expanded on further, but I have to run now to attend a seminar…

]]>added pointer to:

- Tom Schrijvers, Maciej Piróg, Nicolas Wu, Mauro Jaskelioff
*Monad transformers and modular algebraic effects: what binds them together*, in:*Haskell 2019: Proceedings of the 12th ACM SIGPLAN International Symposium on Haskell*(2019) 98–113 [doi:10.1145/3331545.3342595]

who cite Liang et al. broadly but then state the compatibility condition in terms of the join.

]]>expanded the proof (here) to derive the naturality clause

]]>Oh, I see now: Naturality of the transformation is already implied by its respect for `return`

and `bind`

. Will edit…

added a section (here)

making explicit the definition of monad transformers by Liang, Hudak & Jones 1995

and then proving that it is equivalent to monad morphisms in the sense of Maranda 1966.

That is, disregarding the naturality issue which Liang et al. seem to rather gloss over. What I am proving is that a natural transformation between monads satisfies their respect for the bind- operation iff it respects the join in the sense of Maranda.

(The statement/proof is evident/immediate, but I haven’t seen it mentioned anywhere before.)

]]>added pointer to what I gather are the original articles:

David A. Espinosa,

*Semantic Lego*, PhD thesis, Columbia University (1995) [pdf]Sheng Liang, Paul Hudak, Mark Jones,

*Monad transformers and modular interpreters*, POPL ’95 (1995) 333–343 [doi:10.1145/199448.199528]

I have re-written the Idea-section and mentioned the conceptualization of monad ransformers as pointed endofunctors on $Mnd$.

]]>This entry deserves a more contentful statement of what “monad transformers” are meant to be.

I guess people really mean something close to: *pointed endofunctors on the category $Mnd$ of monads*, hence:

For each monad $\mathcal{E}$

a new monad $\mathcal{E}'$

equipped with a monad morphism $t_{\mathcal{E}} \colon \mathcal{E} \to \mathcal{E}'$

(that’s what the Haskell pages seem to define)

and (do people consider this?)

- the condition that the transformations $t_{\mathcal{E}}$ are natural.

[edit: Only now following the links in the above thread, I am reminded that Sergei Winitzki said just that here. So I’ll go ahead and finally make the edit here…]

]]>I have added (here) pointer to:

- Sergei Winitzki, Chapter 14 of:
*The Science of Functional Programming – A tutorial, with examples in Scala*(leanpub:sofp)

(This edit prompted by discussion in another thread of the same name: here)

]]>