wai-transformers 0.1.0 → 0.2.0
raw patch · 3 files changed
+34/−40 lines, 3 filesdep +unliftio-coredep −extractable-singletondep −monad-control-alignedPVP ok
version bump matches the API change (PVP)
Dependencies added: unliftio-core
Dependencies removed: extractable-singleton, monad-control-aligned
API changes (from Hackage documentation)
- Network.Wai.Trans: catchApplicationT :: MonadCatch m => Exception e => ApplicationT m -> (e -> ApplicationT m) -> ApplicationT m
+ Network.Wai.Trans: catchApplicationT :: (MonadCatch m, Exception e) => ApplicationT m -> (e -> ApplicationT m) -> ApplicationT m
- Network.Wai.Trans: catchMiddlewareT :: MonadCatch m => Exception e => MiddlewareT m -> (e -> MiddlewareT m) -> MiddlewareT m
+ Network.Wai.Trans: catchMiddlewareT :: (MonadCatch m, Exception e) => MiddlewareT m -> (e -> MiddlewareT m) -> MiddlewareT m
- Network.Wai.Trans: hoistApplicationT :: Monad m => Monad n => (forall a. m a -> n a) -> (forall a. n a -> m a) -> ApplicationT m -> ApplicationT n
+ Network.Wai.Trans: hoistApplicationT :: (Monad m, Monad n) => (forall a. () => m a -> n a) -> (forall a. () => n a -> m a) -> ApplicationT m -> ApplicationT n
- Network.Wai.Trans: hoistMiddlewareT :: Monad m => Monad n => (forall a. m a -> n a) -> (forall a. n a -> m a) -> MiddlewareT m -> MiddlewareT n
+ Network.Wai.Trans: hoistMiddlewareT :: (Monad m, Monad n) => (forall a. () => m a -> n a) -> (forall a. () => n a -> m a) -> MiddlewareT m -> MiddlewareT n
- Network.Wai.Trans: liftApplication :: MonadBaseControl IO m stM => Extractable stM => Application -> ApplicationT m
+ Network.Wai.Trans: liftApplication :: MonadUnliftIO m => Application -> ApplicationT m
- Network.Wai.Trans: liftMiddleware :: MonadBaseControl IO m stM => Extractable stM => Middleware -> MiddlewareT m
+ Network.Wai.Trans: liftMiddleware :: MonadUnliftIO m => Middleware -> MiddlewareT m
- Network.Wai.Trans: runApplicationT :: MonadBaseControl IO m stM => Extractable stM => ApplicationT m -> m Application
+ Network.Wai.Trans: runApplicationT :: MonadUnliftIO m => ApplicationT m -> m Application
- Network.Wai.Trans: runMiddlewareT :: MonadBaseControl IO m stM => Extractable stM => MiddlewareT m -> m Middleware
+ Network.Wai.Trans: runMiddlewareT :: MonadUnliftIO m => MiddlewareT m -> m Middleware
- Network.Wai.Trans: type ApplicationT m = Request -> (Response -> m ResponseReceived) -> m ResponseReceived
+ Network.Wai.Trans: type ApplicationT (m :: Type -> Type) = Request -> Response -> m ResponseReceived -> m ResponseReceived
- Network.Wai.Trans: type MiddlewareT m = ApplicationT m -> ApplicationT m
+ Network.Wai.Trans: type MiddlewareT (m :: Type -> Type) = ApplicationT m -> ApplicationT m
- Network.WebSockets.Trans: runClientAppT :: MonadBaseControl IO m stM => Extractable stM => ClientAppT m a -> m (ClientApp a)
+ Network.WebSockets.Trans: runClientAppT :: MonadUnliftIO m => ClientAppT m a -> m (ClientApp a)
- Network.WebSockets.Trans: runServerAppT :: MonadBaseControl IO m stM => Extractable stM => ServerAppT m -> m ServerApp
+ Network.WebSockets.Trans: runServerAppT :: MonadUnliftIO m => ServerAppT m -> m ServerApp
- Network.WebSockets.Trans: type ClientAppT m a = Connection -> m a
+ Network.WebSockets.Trans: type ClientAppT (m :: Type -> Type) a = Connection -> m a
- Network.WebSockets.Trans: type ServerAppT m = PendingConnection -> m ()
+ Network.WebSockets.Trans: type ServerAppT (m :: Type -> Type) = PendingConnection -> m ()
- Network.WebSockets.Trans: websocketsOrT :: MonadBaseControl IO m stM => Extractable stM => ConnectionOptions -> ServerAppT m -> MiddlewareT m
+ Network.WebSockets.Trans: websocketsOrT :: MonadUnliftIO m => ConnectionOptions -> ServerAppT m -> MiddlewareT m
Files
- src/Network/Wai/Trans.hs +13/−16
- src/Network/WebSockets/Trans.hs +10/−14
- wai-transformers.cabal +11/−10
src/Network/Wai/Trans.hs view
@@ -21,9 +21,8 @@ import Network.Wai (Application, Middleware, Request, Response, ResponseReceived) -import Data.Singleton.Class (Extractable (runSingleton)) import Control.Monad.Catch (Exception, MonadCatch (catch))-import Control.Monad.Trans.Control.Aligned (MonadBaseControl (liftBaseWith))+import Control.Monad.IO.Unlift (MonadUnliftIO (withRunInIO), askRunInIO, liftIO) -- | Isomorphic to @Kleisli (ContT ResponseReceived m) Request Response@@@ -32,34 +31,32 @@ -- * Lift and Run -liftApplication :: MonadBaseControl IO m stM- => Extractable stM+liftApplication :: MonadUnliftIO m => Application -- ^ To lift -> ApplicationT m-liftApplication app req resp = liftBaseWith (\runInBase -> app req (\r -> runSingleton <$> runInBase (resp r)))+liftApplication app req respond = withRunInIO (\toIO -> app req (toIO . respond)) -liftMiddleware :: MonadBaseControl IO m stM- => Extractable stM+liftMiddleware :: MonadUnliftIO m => Middleware -- ^ To lift -> MiddlewareT m liftMiddleware mid app req respond = do app' <- runApplicationT app- liftBaseWith (\runInBase -> mid app' req (fmap runSingleton . runInBase . respond))+ withRunInIO (\toIO -> mid app' req (toIO . respond)) -runApplicationT :: MonadBaseControl IO m stM- => Extractable stM+runApplicationT :: MonadUnliftIO m => ApplicationT m -- ^ To run -> m Application-runApplicationT app = liftBaseWith $ \runInBase ->- pure $ \req respond -> fmap runSingleton $ runInBase $ app req (\x -> liftBaseWith (\_ -> respond x))+runApplicationT app = do + toIO <- askRunInIO+ pure $ \req respond -> toIO . app req $ liftIO . respond -runMiddlewareT :: MonadBaseControl IO m stM- => Extractable stM+runMiddlewareT :: MonadUnliftIO m => MiddlewareT m -- ^ To run -> m Middleware-runMiddlewareT mid = liftBaseWith $ \runInBase ->+runMiddlewareT mid = do+ toIO <- askRunInIO pure $ \app req respond -> do- app' <- fmap runSingleton $ runInBase $ runApplicationT (mid (liftApplication app))+ app' <- toIO $ runApplicationT (mid (liftApplication app)) app' req respond -- * Monad Morphisms
src/Network/WebSockets/Trans.hs view
@@ -18,9 +18,7 @@ import Network.WebSockets (ConnectionOptions, ClientApp, ServerApp, Connection, PendingConnection) import Network.Wai.Handler.WebSockets (websocketsOr) import Network.Wai.Trans (MiddlewareT, runApplicationT, liftApplication)-import Data.Singleton.Class (Extractable (runSingleton))-import Control.Monad.IO.Class (MonadIO (liftIO))-import Control.Monad.Trans.Control.Aligned (MonadBaseControl (liftBaseWith))+import Control.Monad.IO.Unlift (MonadUnliftIO (withRunInIO), askRunInIO, MonadIO (liftIO)) -- * Websockets@@ -32,12 +30,12 @@ -> ServerAppT m liftServerApp s = liftIO . s -runServerAppT :: MonadBaseControl IO m stM- => Extractable stM+runServerAppT :: MonadUnliftIO m => ServerAppT m -- ^ To run -> m ServerApp-runServerAppT s = liftBaseWith $ \runInBase ->- pure $ \pending -> runSingleton <$> runInBase (s pending)+runServerAppT s = do+ toIO <- askRunInIO+ pure $ \pending -> toIO $ s pending type ClientAppT m a = Connection -> m a @@ -46,19 +44,17 @@ -> ClientAppT m a liftClientApp c = liftIO . c -runClientAppT :: MonadBaseControl IO m stM- => Extractable stM+runClientAppT :: MonadUnliftIO m => ClientAppT m a -- ^ To run -> m (ClientApp a)-runClientAppT c = liftBaseWith $ \runInBase ->- pure $ \conn -> runSingleton <$> runInBase (c conn)-+runClientAppT c = do+ toIO <- askRunInIO+ pure $ \conn -> toIO $ c conn -- * WAI Compatability -- | Respond with the WebSocket server when applicable, as a middleware-websocketsOrT :: MonadBaseControl IO m stM- => Extractable stM+websocketsOrT :: MonadUnliftIO m => ConnectionOptions -> ServerAppT m -- ^ Server -> MiddlewareT m
wai-transformers.cabal view
@@ -1,22 +1,24 @@--- This file has been generated from package.yaml by hpack version 0.21.2.+cabal-version: 1.12++-- This file has been generated from package.yaml by hpack version 0.37.0. -- -- see: https://github.com/sol/hpack ----- hash: 8e306e52f1f366b2119966770b3cebf95cf4d551b833e42765a246aa7acf78df+-- hash: d039f3b98166ce2d066c5df7b9e98c4ce21bacd0e31f6671ed97eaae6940f76a name: wai-transformers-version: 0.1.0-description: Please see the README on Github at <https://git.localcooking.com/tooling/wai-transformers#readme>+version: 0.2.0+synopsis: Monad transformers for WAI and WebSockets+description: Please see the README on Github at <https://github.com/athanclark/wai-transformers#readme>+category: Web homepage: https://github.com/athanclark/wai-transformers#readme bug-reports: https://github.com/athanclark/wai-transformers/issues author: Athan Clark-maintainer: athan.clark@localcooking.com-copyright: 2018 Athan Clark+maintainer: aclark@araliasoftware.com+copyright: 2025 Athan Clark license: BSD3 license-file: LICENSE build-type: Simple-cabal-version: >= 1.10- extra-source-files: README.md @@ -36,9 +38,8 @@ build-depends: base >=4.8 && <5 , exceptions- , extractable-singleton >=0.0.1- , monad-control-aligned >=0.0.1 , transformers+ , unliftio-core , wai >=3.2.1 , wai-websockets , websockets >=0.12.4