Copyright | (c) 2015 Athan Clark |
---|---|
License | BSD-style |
Maintainer | athan.clark@gmail.com |
Stability | experimental |
Portability | GHC |
Safe Haskell | None |
Language | Haskell2010 |
Simple utilities for embedding a monad transformer stack in an Application
or Middleware
- with MiddlewareT
, your transformer stack is shared
across all attached middlewares until run. You can also lift existing Middleware
to MiddlewareT
, given some extraction function.
- module Network.Wai
- type ApplicationT m = Request -> (Response -> m ResponseReceived) -> m ResponseReceived
- type MiddlewareT m = ApplicationT m -> ApplicationT m
- liftApplication :: MonadIO m => (forall a. m a -> IO a) -> Application -> ApplicationT m
- liftMiddleware :: MonadIO m => (forall a. m a -> IO a) -> Middleware -> MiddlewareT m
- runApplicationT :: MonadIO m => (forall a. m a -> IO a) -> ApplicationT m -> Application
- runMiddlewareT :: MonadIO m => (forall a. m a -> IO a) -> MiddlewareT m -> Middleware
- hoistApplicationT :: (Monad m, Monad n) => (forall a. m a -> n a) -> (forall a. n a -> m a) -> ApplicationT m -> ApplicationT n
- hoistMiddlewareT :: (Monad m, Monad n) => (forall a. m a -> n a) -> (forall a. n a -> m a) -> MiddlewareT m -> MiddlewareT n
- inApplicationT :: Monad m => m a -> ApplicationT m -> ApplicationT m
- inMiddlewareT :: Monad m => m a -> MiddlewareT m -> MiddlewareT m
- catchApplicationT :: (MonadCatch m, Exception e) => ApplicationT m -> (e -> ApplicationT m) -> ApplicationT m
- catchMiddlewareT :: (MonadCatch m, Exception e) => MiddlewareT m -> (e -> MiddlewareT m) -> MiddlewareT m
- readingRequest :: Monad m => (Request -> m ()) -> MiddlewareT m
- type ServerAppT m = PendingConnection -> m ()
- liftServerApp :: MonadIO m => ServerApp -> ServerAppT m
- runServerAppT :: (forall a. m a -> IO a) -> ServerAppT m -> ServerApp
- type ClientAppT m a = Connection -> m a
- liftClientApp :: MonadIO m => ClientApp a -> ClientAppT m a
- runClientAppT :: (forall a. m a -> IO a) -> ClientAppT m a -> ClientApp a
- websocketsOrT :: MonadIO m => (forall a. m a -> IO a) -> ConnectionOptions -> ServerAppT m -> MiddlewareT m
WAI
Types
module Network.Wai
type ApplicationT m = Request -> (Response -> m ResponseReceived) -> m ResponseReceived Source #
Isomorphic to Kleisli (ContT ResponseReceived m) Request Response
type MiddlewareT m = ApplicationT m -> ApplicationT m Source #
Embedding
liftApplication :: MonadIO m => (forall a. m a -> IO a) -> Application -> ApplicationT m Source #
liftMiddleware :: MonadIO m => (forall a. m a -> IO a) -> Middleware -> MiddlewareT m Source #
runApplicationT :: MonadIO m => (forall a. m a -> IO a) -> ApplicationT m -> Application Source #
runMiddlewareT :: MonadIO m => (forall a. m a -> IO a) -> MiddlewareT m -> Middleware Source #
hoistApplicationT :: (Monad m, Monad n) => (forall a. m a -> n a) -> (forall a. n a -> m a) -> ApplicationT m -> ApplicationT n Source #
hoistMiddlewareT :: (Monad m, Monad n) => (forall a. m a -> n a) -> (forall a. n a -> m a) -> MiddlewareT m -> MiddlewareT n Source #
inApplicationT :: Monad m => m a -> ApplicationT m -> ApplicationT m Source #
inMiddlewareT :: Monad m => m a -> MiddlewareT m -> MiddlewareT m Source #
Exception catching
catchApplicationT :: (MonadCatch m, Exception e) => ApplicationT m -> (e -> ApplicationT m) -> ApplicationT m Source #
catchMiddlewareT :: (MonadCatch m, Exception e) => MiddlewareT m -> (e -> MiddlewareT m) -> MiddlewareT m Source #
General Purpose
readingRequest :: Monad m => (Request -> m ()) -> MiddlewareT m Source #
Websockets
type ServerAppT m = PendingConnection -> m () Source #
liftServerApp :: MonadIO m => ServerApp -> ServerAppT m Source #
runServerAppT :: (forall a. m a -> IO a) -> ServerAppT m -> ServerApp Source #
type ClientAppT m a = Connection -> m a Source #
liftClientApp :: MonadIO m => ClientApp a -> ClientAppT m a Source #
runClientAppT :: (forall a. m a -> IO a) -> ClientAppT m a -> ClientApp a Source #
websocketsOrT :: MonadIO m => (forall a. m a -> IO a) -> ConnectionOptions -> ServerAppT m -> MiddlewareT m Source #
Respond with the WebSocket server when applicable, as a middleware