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 respond depending on an HTTP verbs.
The Combinators section defines the get
, post
and other functions you would
expect in a toolset like this. The VerbListenerT
object is constructed from the
combinators, and turning it directly into a WAI MiddlewareT
is easy with verbsToMiddleware
.
myApp :: MonadIO => MiddlewareT m myApp = verbsToMiddleware $ do get myMiddleware1 put uploader myMiddleware2 post uploader myMiddleware3 delete myMiddleware4 where uploader :: MonadIO m => Request -> m () uploader req = liftIO $ print =<< getStrictRequestBody req
- get :: (Monad m, Monoid r) => r -> VerbListenerT r m ()
- post :: (Monad m, Monoid r) => r -> VerbListenerT r m ()
- put :: (Monad m, Monoid r) => r -> VerbListenerT r m ()
- delete :: (Monad m, Monoid r) => r -> VerbListenerT r m ()
- type VerbMap r = HashMap Verb r
- type Verb = StdMethod
- newtype VerbListenerT r m a = VerbListenerT {
- runVerbListenerT :: StateT (VerbMap r) m a
- execVerbListenerT :: Monad m => VerbListenerT r m a -> m (VerbMap r)
- lookupVerb :: Verb -> VerbMap r -> Maybe r
- getVerb :: Request -> Verb
Combinators
Types
Monad Transformer
newtype VerbListenerT r m a Source #
This is the monad for our DSL - where r
is the result type. We leave this
polymorphic for ActionT
for nested-routes.
myListener :: MonadIO m => VerbListenerT (MiddlewareT m) m () myListener = do get myMiddleware1 post uploader myMiddleware2 where uploader :: MonadIO Request -> m () uploader req = liftIO $ print =<< strictRequestBody req
VerbListenerT | |
|
MonadReader r m => MonadReader r (VerbListenerT r m) Source # | |
MonadWriter w m => MonadWriter w (VerbListenerT r m) Source # | |
MonadBase b m => MonadBase b (VerbListenerT r m) Source # | |
MonadError e' m => MonadError e' (VerbListenerT r m) Source # | |
MonadTrans (VerbListenerT r) Source # | |
Monad m => MonadState (VerbMap r) (VerbListenerT r m) Source # | |
Monad m => Monad (VerbListenerT r m) Source # | |
Functor m => Functor (VerbListenerT r m) Source # | |
MonadFix m => MonadFix (VerbListenerT r m) Source # | |
Monad m => Applicative (VerbListenerT r m) Source # | |
MonadIO m => MonadIO (VerbListenerT r m) Source # | |
MonadPlus m => Alternative (VerbListenerT r m) Source # | |
MonadPlus m => MonadPlus (VerbListenerT r m) Source # | |
MonadCont m => MonadCont (VerbListenerT r m) Source # | |
MonadThrow m => MonadThrow (VerbListenerT r m) Source # | |
MonadMask m => MonadMask (VerbListenerT r m) Source # | |
MonadCatch m => MonadCatch (VerbListenerT r m) Source # | |
(MonadResource m, MonadBase IO m) => MonadResource (VerbListenerT r m) Source # | |
MonadLogger m => MonadLogger (VerbListenerT r m) Source # | |
execVerbListenerT :: Monad m => VerbListenerT r m a -> m (VerbMap r) Source #
Utilities
lookupVerb :: Verb -> VerbMap r -> Maybe r Source #
Take the monadic partial result of lookupVerb
, and actually h the upload.