Copyright | (c) Athan Clark, 2015 |
---|---|
License | BSD-3 |
Maintainer | athan.clark@gmail.com |
Stability | experimental |
Portability | POSIX |
Safe Haskell | None |
Language | Haskell2010 |
This module provides everything you need to route based off different HTTP verbs.
The Combinators section defines the get
, post
and other functions you would
expect in a toolset like this. Likewise, we also include tools for manually
looking into the VerbListenerT object constructed from the combinators, and
turning it directly into a WAI MiddlewareT
.
- get :: Monad m => r -> VerbListenerT r e u m ()
- getReq :: Monad m => (Request -> r) -> VerbListenerT r e u m ()
- post :: (Monad m, MonadIO m) => HandleUpload e m u -> (Either (Maybe e) u -> r) -> VerbListenerT r e u m ()
- postReq :: (Monad m, MonadIO m) => HandleUpload e m u -> RespondUpload e u r -> VerbListenerT r e u m ()
- put :: (Monad m, MonadIO m) => HandleUpload e m u -> (Either (Maybe e) u -> r) -> VerbListenerT r e u m ()
- putReq :: (Monad m, MonadIO m) => HandleUpload e m u -> RespondUpload e u r -> VerbListenerT r e u m ()
- delete :: Monad m => r -> VerbListenerT r e u m ()
- deleteReq :: Monad m => (Request -> r) -> VerbListenerT r e u m ()
- newtype Verbs e u m r = Verbs {
- unVerbs :: Map Verb (ResponseSpec e u m r)
- type Verb = StdMethod
- getVerb :: Request -> Verb
- type ResponseSpec e u m r = (HandleUpload e m u, RespondUpload e u r)
- type HandleUpload e m u = Request -> ExceptT (Maybe e) m u
- type RespondUpload e u r = Request -> Either (Maybe e) u -> r
- supplyReq :: Request -> Map Verb (ResponseSpec e u m r) -> Map Verb (ExceptT (Maybe e) m u, Either (Maybe e) u -> r)
- newtype VerbListenerT r e u m a = VerbListenerT {
- runVerbListenerT :: StateT (Verbs e u m r) m a
- execVerbListenerT :: Monad m => VerbListenerT r e u m a -> m (Verbs e u m r)
- verbsToMiddleware :: MonadIO m => VerbListenerT (MiddlewareT m) e u m () -> MiddlewareT m
- mapVerbs :: Monad m => (a -> b) -> VerbListenerT a e u m () -> VerbListenerT b e u m ()
- lookupVerb :: Verb -> Request -> Verbs e u m r -> Maybe (ExceptT (Maybe e) m u, Either (Maybe e) u -> r)
- lookupVerbM :: Monad m => Verb -> Request -> Verbs e u m r -> m (Maybe r)
Combinators
get :: Monad m => r -> VerbListenerT r e u m () Source
For simple GET
responses
getReq :: Monad m => (Request -> r) -> VerbListenerT r e u m () Source
Inspect the Request
object supplied by WAI
post :: (Monad m, MonadIO m) => HandleUpload e m u -> (Either (Maybe e) u -> r) -> VerbListenerT r e u m () Source
For simple POST
responses
postReq :: (Monad m, MonadIO m) => HandleUpload e m u -> RespondUpload e u r -> VerbListenerT r e u m () Source
Inspect the Request
object supplied by WAI
put :: (Monad m, MonadIO m) => HandleUpload e m u -> (Either (Maybe e) u -> r) -> VerbListenerT r e u m () Source
For simple PUT
responses
putReq :: (Monad m, MonadIO m) => HandleUpload e m u -> RespondUpload e u r -> VerbListenerT r e u m () Source
Inspect the Request
object supplied by WAI
delete :: Monad m => r -> VerbListenerT r e u m () Source
For simple DELETE
responses
deleteReq :: Monad m => (Request -> r) -> VerbListenerT r e u m () Source
Inspect the Request
object supplied by WAI
Types
A map from an HTTP verb, to a responding and uploading mechanism.
Verbs | |
|
type ResponseSpec e u m r = (HandleUpload e m u, RespondUpload e u r) Source
type HandleUpload e m u = Request -> ExceptT (Maybe e) m u Source
Given a request, either throw a possibly existent error, or create some upload result.
type RespondUpload e u r = Request -> Either (Maybe e) u -> r Source
Given a request and the potential result of handling an upload, return a
response (usually Middleware
).
supplyReq :: Request -> Map Verb (ResponseSpec e u m r) -> Map Verb (ExceptT (Maybe e) m u, Either (Maybe e) u -> r) Source
flip ($)
for supplying a Request
into the two ResponseSpec
functions.
Monad Transformer
newtype VerbListenerT r e u m a Source
The type variables are r
for the result, e
for the error type throwable
during uploading, u
is the sucessful upload type, and m
and a
form the
last two parts of the monad transformer.
VerbListenerT | |
|
MonadTrans (VerbListenerT r e u) Source | |
Monad m => Monad (VerbListenerT r e u m) Source | |
Functor m => Functor (VerbListenerT r e u m) Source | |
Monad m => Applicative (VerbListenerT r e u m) Source | |
MonadIO m => MonadIO (VerbListenerT r e u m) Source | |
Monad m => MonadState (Verbs e u m r) (VerbListenerT r e u m) Source |
execVerbListenerT :: Monad m => VerbListenerT r e u m a -> m (Verbs e u m r) Source
verbsToMiddleware :: MonadIO m => VerbListenerT (MiddlewareT m) e u m () -> MiddlewareT m Source
Turn a map from HTTP verbs to middleware, into a middleware.
mapVerbs :: Monad m => (a -> b) -> VerbListenerT a e u m () -> VerbListenerT b e u m () Source