monad docs

This commit is contained in:
Stephen Diehl
2016-07-29 11:33:32 -04:00
parent 1cb0630529
commit 76f3f9f17c
2 changed files with 136 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
Welcome to project documentation.
- [Monad and Monadic Functions](docs/Monad.md)
+133
View File
@@ -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
```