From 76f3f9f17cfb65adaa0736ef3f2af4df24f7acf6 Mon Sep 17 00:00:00 2001 From: Stephen Diehl Date: Fri, 29 Jul 2016 11:33:32 -0400 Subject: [PATCH] monad docs --- docs/Index.md | 3 ++ docs/Monad.md | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 136 insertions(+) create mode 100644 docs/Index.md create mode 100644 docs/Monad.md diff --git a/docs/Index.md b/docs/Index.md new file mode 100644 index 000000000..286b3e805 --- /dev/null +++ b/docs/Index.md @@ -0,0 +1,3 @@ +Welcome to project documentation. + +- [Monad and Monadic Functions](docs/Monad.md) diff --git a/docs/Monad.md b/docs/Monad.md new file mode 100644 index 000000000..53452fdc2 --- /dev/null +++ b/docs/Monad.md @@ -0,0 +1,133 @@ +Monads +====== + +#### Monad + +```haskell +class Applicative m => Monad (m :: * -> *) where + (>>=) :: m a -> (a -> m b) -> m b + (>>) :: m a -> m b -> m b + return :: a -> m a + GHC.Base.fail :: GHC.Base.String -> m a +``` + +```haskell +(>=>) :: Monad m => (a -> m b) -> (b -> m c) -> a -> m c +``` + +```haskell +(<=<) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c +``` + +```haskell +(>>) :: Monad m => m a -> m b -> m b +``` + +```haskell +(>>=) :: Monad m => m a -> (a -> m b) -> m b +``` + +```haskell +forever :: Monad m => m a -> m b +``` + +```haskell +join :: Monad m => m (m a) -> m a +``` + +```haskell +filterM :: Monad m => (a -> m Bool) -> [a] -> m [a] +``` + +```haskell +mapAndUnzipM :: Monad m => (a -> m (b, c)) -> [a] -> m ([b], [c]) +``` + +```haskell +zipWithM :: Monad m => (a -> b -> m c) -> [a] -> [b] -> m [c] +``` + +```haskell +zipWithM_ :: Monad m => (a -> b -> m c) -> [a] -> [b] -> m () +``` + +```haskell +foldM :: (Monad m, Foldable t) => (b -> a -> m b) -> b -> t a -> m b +``` + +```haskell +foldM_ :: (Monad m, Foldable t) => (b -> a -> m b) -> b -> t a -> m () +``` + +```haskell +replicateM :: Monad m => Int -> m a -> m [a] +``` + +```haskell +replicateM_ :: Monad m => Int -> m a -> m () +``` + +```haskell +concatMapM :: Monad m => (a -> m [b]) -> [a] -> m [b] +``` + +```haskell +guard :: Alternative f => Bool -> f () +``` + +```haskell +when :: Applicative f => Bool -> f () -> f () +``` + +```haskell +unless :: Applicative f => Bool -> f () -> f () +``` + +```haskell +liftM :: Monad m => (a1 -> r) -> m a1 -> m r +``` + +```haskell +liftM2 :: Monad m => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r +``` + +```haskell +liftM3 :: Monad m => (a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r +``` + +```haskell +liftM4 :: Monad m => (a1 -> a2 -> a3 -> a4 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m r +``` + +```haskell +liftM5 :: Monad m => (a1 -> a2 -> a3 -> a4 -> a5 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m a5 -> m r +``` + +```haskell +liftM' :: Monad m => (a -> b) -> m a -> m b +``` + +```haskell +liftM2' :: Monad m => (a -> b -> c) -> m a -> m b -> m c +``` + +```haskell +ap :: Monad m => m (a -> b) -> m a -> m b +``` + +```haskell +(<$!>) :: Monad m => (a -> b) -> m a -> m b +``` + +#### MonadPlus + +```haskell +class (Alternative m, Monad m) => MonadPlus (m :: * -> *) where + mzero :: m a + mplus :: m a -> m a -> m a + -- Defined in ‘GHC.Base’ +``` + +```haskell +mfilter :: MonadPlus m => (a -> Bool) -> m a -> m a +```