Tags

Kleisli adjunction

Given monad over a category , let be the Kleisli category of . Given an object in , write to mean viewed as an object of . Given an arrow in , write to mean viewed as an arrow in .

Define a functor by

Further define a functor by

type Kleisli m a b = a -> m b

f :: Monad m => (a -> b) -> Kelsli m a b
f h = return . h

g :: Monad m => Kleisli m a b -> (m a -> m b)
g h = join . fmap h

Then these functors form an adjunction with unit and counit

Furthermore, .

Of course, is a comonad. Explicitly, the comonad is , where

kmap :: Monad m => Kleisli m a b -> Kleisli m (m a) (m b)
kmap = return . (>>= f) -- equivalent to return . join . fmap f

kextract :: Monad m => m (m a) -> m a
kextract = join

kextend :: Monad m => Kleisli (m a) (m (m a))
kextend = return . return

Author: Nicholas Coltharp (mail@heraplem.xyz)

Last modified: 2026-10-01 Thu 17:13

Emacs 31.1 (Org mode 9.8.7)

Validate