request-monad-0.3.0.1: A transformer for generic requests

Copyright(c) Tom Hulihan <hulihan.tom159@gmail.com> 2014,
LicenseMIT
Maintainerhulihan.tom159@gmail.com
Stabilityexperimental
Portabilitynon-portable (multi-parameter type classes)
Safe HaskellSafe-Inferred
LanguageHaskell2010

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

Synopsis

MonadRequest

class Monad m => MonadRequest r r' m | m -> r r' where Source

This type class generalizes monadic requests.

Parameters:

  • r - The type of request
  • r' - The type of response
  • m - The monad through which the requests are sent

Methods

send :: r -> m r' Source

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.

request Source

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.

runRequest Source

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 Request r r' a action.

mapRequest Source

Arguments

:: (x -> r)

The middleware function

-> Request x r' a

The computation which sends x

-> Request r r' a

The computation which sends r

Given a x -> r, transform a computation that sends requests of type x into one that sends requests of type r.

mapResponse Source

Arguments

:: (r' -> x)

The middleware function

-> Request r x a

The computation which handles x

-> Request r r' a

The computation which handles r'

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.

requestT Source

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.

runRequestT Source

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 RequestT r r' m a and a mapping from requests to responses, return a monadic computation which produces a.

mapRequestT Source

Arguments

:: Monad m 
=> (x -> RequestT r r' m r)

The middleware

-> RequestT x r' m a

The x-requester

-> RequestT r r' m a

The r-requester

Turn a computation that requests x into a computation that requests r.

mapResponseT Source

Arguments

:: Monad m 
=> (r' -> RequestT r r' m x)

The middleware

-> RequestT r x m a

The x-handler

-> RequestT r r' m a

The r'-handler

Turn a computation that handles x into a computation that handles r'.