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:
Request
String 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
.