class Monad m where
return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b
Wenn m ein Endo-Funktor ist,
dann gilt in der Kleisli-Kategorie von m:
Identität
ida ist return :: a -> m a
Komposition ist:
import Control.Monad
(>=>) :: Monad m
=> (a -> m b) -> (b -> m c) -> (a -> m c)
f (>=>) g = \ x -> ( f x ) >>= g