Haskell's monads are usually considered to mean strong monads in category theory, but it seems like the former is a bit stronger than the latter. With strong monads, you have a Kleisli extension operator

$-^* : C(a, Tb) → C(Ta, Tb)$

that operates outside the category $C$, whereas with Haskell's monads you can write an internal extension operator

$e : \mathbf{Hask}(a ⇒ Tb, Ta ⇒ Tb)$

that operates entirely inside $\mathbf{Hask}$. The intuitive difference is that $M^*$ could involve a translation on $M : C(a, Tb)$ that inspects its syntax, whereas $eM$ can only operate on $M$ extensionally, only manipulating $M$ through whatever accessors are available for its type.

AFAICT, $-^*$ can be derived from $e$, but not vice versa, even assuming tensorial strength and Cartesian-closed structure. Is this true, or is there a way to derive $e$ from $-^*$ that I missed?

If Haskell's monads are not just strong monads, then do they have a name, and is there any interesting difference known about them vs. strong monads?


1 Answer 1


In a CCC, we have the following equivalence:

$$C(a ⇒ Tb, Ta ⇒ Tb) \cong C((a ⇒ Tb)×Ta, Tb)$$

Using tensorial strength, to give an element of the latter it suffices to give an element of:

$$C(T((a ⇒ Tb) × a), Tb)$$

And then using the evaluation map, it suffices to give:

$$C(TTb, Tb)$$

But this is given by the multiplication of the monad. So, strong monads in a CCC actually do have this sort of internal 'bind' operation. Despite the presentation, this is actually one of the core motivations behind strong monads/functors—internalizing the operations. The tensorial strength is just a characterization that makes sense without the category necessarily being closed.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.