| Copyright | (c) Tom Hulihan <hulihan.tom159@gmail.com> 2014, |
|---|---|
| License | MIT |
| Maintainer | hulihan.tom159@gmail.com |
| Stability | experimental |
| Portability | non-portable (multi-parameter type classes) |
| Safe Haskell | Safe-Inferred |
| Language | Haskell2010 |
Control.Monad.Request.Lazy
Contents
Description
- Computation type:
- Compuations that send requests and handle responses
- Binding strategy:
- Response callbacks are composed with the binding function
- Useful for:
- Implementation-agnostic requests (i.e. making real requests versus mocking), adding middlewares.
- Example type:
RequestString String a
The Request monad
- class Monad m => MonadRequest r r' m | m -> r r' where
- send :: r -> m r'
- type Request r r' = RequestT r r' Identity
- request :: r -> (r' -> a) -> Request r r' a
- runRequest :: Request r r' a -> (r -> r') -> a
- mapRequest :: (x -> r) -> Request x r' a -> Request r r' a
- mapResponse :: (r' -> x) -> Request r x a -> Request r r' a
- type RequestT r r' = FreeT (RequestF r r')
- requestT :: Monad m => r -> (r' -> RequestT r r' m a) -> RequestT r r' m a
- runRequestT :: Monad m => RequestT r r' m a -> (r -> m r') -> m a
- mapRequestT :: Monad m => (x -> RequestT r r' m r) -> RequestT x r' m a -> RequestT r r' m a
- mapResponseT :: Monad m => (r' -> RequestT r r' m x) -> RequestT r x m a -> RequestT r r' m a
MonadRequest
class Monad m => MonadRequest r r' m | m -> r r' where Source
This type class generalizes monadic requests.
Parameters:
r- The type of requestr'- The type of responsem- The monad through which the requests are sent
Methods
Given a request of type r, perform an action in m whose result is
r'.
Instances
| MonadRequest r r' m => MonadRequest r r' (MaybeT m) | |
| MonadRequest r r' m => MonadRequest r r' (ListT m) | |
| MonadRequest r r' m => MonadRequest r r' (IdentityT m) | |
| (Monoid w, MonadRequest r r' m) => MonadRequest r r' (WriterT w m) | |
| (Monoid w, MonadRequest r r' m) => MonadRequest r r' (WriterT w m) | |
| MonadRequest r r' m => MonadRequest r r' (StateT x m) | |
| MonadRequest r r' m => MonadRequest r r' (StateT x m) | |
| MonadRequest r r' m => MonadRequest r r' (ReaderT x m) | |
| MonadRequest r r' m => MonadRequest r r' (ExceptT e m) | |
| (Error e, MonadRequest r r' m) => MonadRequest r r' (ErrorT e m) | |
| MonadRequest r r' m => MonadRequest r r' (ContT x m) | |
| Monad m => MonadRequest r r' (RequestT r r' m) | |
| (Monoid w, MonadRequest r r' m) => MonadRequest r r' (RWST x w s m) | |
| (Monoid w, MonadRequest r r' m) => MonadRequest r r' (RWST x w s m) |
Request
type Request r r' = RequestT r r' Identity Source
A Request monad, parameterized by the request type, r, and response type,
r'.
together.
Arguments
| :: r | The request |
| -> (r' -> a) | The response callback |
| -> Request r r' a | The resulting computation |
Turn a request and response callback into a monadic computation.
Arguments
| :: Request r r' a | The computation to run |
| -> (r -> r') | A function that turns requests into responses |
| -> a | The final result of the computation |
Evaluate a action.Request r r' a
Arguments
| :: (x -> r) | The middleware function |
| -> Request x r' a | The computation which sends |
| -> Request r r' a | The computation which sends |
Given a x -> r, transform a computation that sends requests of type x
into one that sends requests of type r.
Arguments
| :: (r' -> x) | The middleware function |
| -> Request r x a | The computation which handles |
| -> Request r r' a | The computation which handles |
Given a mapping from r' -> x, transform a computation handles responses
of type x to one that handles responses of type r'.
RequestT
type RequestT r r' = FreeT (RequestF r r') Source
A request monad, parameterized by the request type, r, response type,
r', and inner monad, m.
Arguments
| :: Monad m | |
| => r | The request |
| -> (r' -> RequestT r r' m a) | The response callback |
| -> RequestT r r' m a | The resulting computation |
This function takes a request and monadic response handler to produce a
.RequestT r r' m a
Arguments
| :: Monad m | |
| => RequestT r r' m a | The computation to run |
| -> (r -> m r') | The request function |
| -> m a | The resulting computation |
Given a and a mapping from requests to responses,
return a monadic computation which produces RequestT r r' m aa.