-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Simple parameterization of Wai's Application type
--   
--   Simple parameterization of Wai's Application type
@package wai-transformers
@version 0.0.7


-- | Simple utilities for embedding a monad transformer stack in an
--   <tt>Application</tt> or <tt>Middleware</tt> - with
--   <tt>MiddlewareT</tt>, your transformer stack is shared across all
--   attached middlewares until run. You can also lift existing
--   <tt>Middleware</tt> to <tt>MiddlewareT</tt>, given some extraction
--   function.
module Network.Wai.Trans

-- | Isomorphic to <tt>Kleisli (ContT ResponseReceived m) Request
--   Response</tt>
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

-- | Respond with the WebSocket server when applicable, as a middleware
websocketsOrT :: (MonadIO m) => (forall a. m a -> IO a) -> ConnectionOptions -> ServerAppT m -> MiddlewareT m
