@hackage MHask0.1.0.0

The category of monads

MHask is the category where

  • The objects are Haskell types of kind (* -> *) that have an instance of Monad

  • An arrow from object m to object n is a Haskell function of the form (forall x. m x -> n x)

  • Arrow composition is merely a specialization of Haskell function composition

  • The identity arrow for the object m is the id function in Haskell, specialized to (forall x. m x -> m x)

Functor should actually be called Endofunctor, because if m is an object in MHask, then an instance t of Functor can transform object m into object (t m). You will see *a lot* of constraints in the type classes defined herein. Though daunting at first, you will soon realize that they are *all* Prelude.Monad constraints, and their interpretation is simply a guarantee that "the objects of MHask are types of kind (* -> *) that have an instance of Monad."