RoyalMonad-1000.7: All hail the Royal Monad!

Copyright(c) Atze van der Ploeg 2015
LicenseBSD-style
Maintaineratzeus@gmail.org
Stabilityroyal
Portabilityroyal
Safe HaskellSafe-Inferred
LanguageHaskell98

Control.Monad.Royal

Description

Introducing his majesty the Royal Monad.

Royal Monads (or relative polymonads) generalize monads, polymonads _and_ relative monads.

Therefore Royal Monads (capitalize to emphasise royalness) are the king of monads!

The ultimate abstraction!

Ditch your boring old relative, poly or ordinary monad, and start programming with the king of monads!

Bow before the ultimate generality of the Royal Monad!

Synopsis

Documentation

class RoyalReturn m r where Source

Methods

royalReturn :: r a -> m a Source

Instances

class (RoyalReturn m r, RoyalReturn n r, RoyalReturn p r) => RoyalMonad m n p r where Source

laws (same as monad, but much more Royal):

royalBind m royalReturn = m
royalBind (royalReturn x) f = f x
royalBind m (\x -> royalBind (f x) g) = royalBind (royalBind m f) g

Methods

royalBind :: m a -> (r a -> n a) -> p a Source

Instances

Monad m => RoyalMonad m m m Id 
PolyMonad m n p => RoyalMonad m n p Id 

class RoyalReturn m r => RelMonad m r where Source

Relative monads laws:

relativeBind m royalReturn = m
relativeBind (royalReturn x) f = f x
relativeBind m (\x -> relativeBind (f x) g) = relativeBind (relativeBind m f) g

Methods

relativeBind :: m a -> (r a -> m b) -> m b Source

class NonRoyalReturn m where Source

Methods

rreturn :: a -> m a Source

Instances

class (NonRoyalReturn m, NonRoyalReturn n, NonRoyalReturn p) => PolyMonad m n p where Source

Relative monads laws:

polyBind m rreturn = m
polyBind (rreturn x) f = f x
polyBind m (\x -> polyBind (f x) g) = polyBind (polyBind m f) g

Methods

polyBind :: m a -> (a -> n b) -> p b Source

newtype Id a Source

Constructors

Id 

Fields

fromId :: a
 

Instances

NonRoyalReturn m => RoyalReturn m Id 
Monad m => RoyalMonad m m m Id 
PolyMonad m n p => RoyalMonad m n p Id