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 |
- 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
- data RequestT r r' m a
- requestT :: Monad m => 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 -> m r) -> RequestT x r' m a -> RequestT r r' m a
- mapResponseT :: Monad m => (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
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.
:: 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.
:: 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
:: (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
.
:: (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
A request monad, parameterized by the request type, r
, response type,
r'
, and inner monad, m
.
(Monoid w, MonadReader r m, MonadWriter w m, MonadState s m) => MonadRWS r w s (RequestT r r' m) | |
Monad m => MonadRequest r r' (RequestT r r' m) | |
MonadError e m => MonadError e (RequestT r r' m) | |
MonadReader x m => MonadReader x (RequestT r r' m) | |
MonadState s m => MonadState s (RequestT r r' m) | |
(Monoid w, MonadWriter w m) => MonadWriter w (RequestT r r' m) | |
MonadTrans (RequestT r r') | |
Alternative m => Alternative (RequestT r r' m) | |
Monad m => Monad (RequestT r r' m) | |
Functor m => Functor (RequestT r r' m) | |
MonadPlus m => MonadPlus (RequestT r r' m) | |
Applicative m => Applicative (RequestT r r' m) | |
MonadIO m => MonadIO (RequestT r r' m) |
:: Monad m | |
=> r | The request |
-> (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
:: 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
.
:: Monad m | |
=> (x -> m r) | The middleware function |
-> RequestT x r' m a | The |
-> RequestT r r' m a | The |
Turn a computation that requests x
into a computation that requests r
.