packages feed

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 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