Copyright | (c) Atze van der Ploeg 2015 |
---|---|
License | BSD-style |
Maintainer | atzeus@gmail.org |
Stability | royal |
Portability | royal |
Safe Haskell | Safe-Inferred |
Language | Haskell98 |
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!
- class RoyalReturn m r where
- royalReturn :: r a -> m a
- class (RoyalReturn m r, RoyalReturn n r, RoyalReturn p r) => RoyalMonad m n p r where
- royalBind :: m a -> (r a -> n a) -> p a
- class RoyalReturn m r => RelMonad m r where
- relativeBind :: m a -> (r a -> m b) -> m b
- class NonRoyalReturn m where
- rreturn :: a -> m a
- class (NonRoyalReturn m, NonRoyalReturn n, NonRoyalReturn p) => PolyMonad m n p where
- polyBind :: m a -> (a -> n b) -> p b
- newtype Id a = Id {
- fromId :: a
Documentation
class RoyalReturn m r where Source
royalReturn :: r a -> m a Source
NonRoyalReturn m => RoyalReturn m Id |
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
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
relativeBind :: m a -> (r a -> m b) -> m b Source
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
NonRoyalReturn m => RoyalReturn m Id | |
Monad m => RoyalMonad m m m Id | |
PolyMonad m n p => RoyalMonad m n p Id |