diff --git a/stack.yaml b/stack.yaml index 213e9db3..b53c2b2e 100644 --- a/stack.yaml +++ b/stack.yaml @@ -13,3 +13,5 @@ packages: - ./yesod - ./yesod-eventsource - ./yesod-websockets +extra-deps: +- unliftio-core-0.1.0.0 diff --git a/yesod-core/Yesod/Core/Types.hs b/yesod-core/Yesod/Core/Types.hs index 607dde01..fd4572de 100644 --- a/yesod-core/Yesod/Core/Types.hs +++ b/yesod-core/Yesod/Core/Types.hs @@ -66,6 +66,7 @@ import Data.Conduit.Lazy (MonadActive, monadActive) import Yesod.Core.TypeCache (TypeMap, KeyedTypeMap) import Control.Monad.Logger (MonadLoggerIO (..)) import Data.Semigroup (Semigroup) +import Control.Monad.IO.Unlift (MonadUnliftIO (..), UnliftIO (..), withUnliftIO) -- Sessions type SessionMap = Map Text ByteString @@ -424,6 +425,12 @@ instance MonadBaseControl b m => MonadBaseControl b (WidgetT site m) where liftBaseWith $ \runInBase -> f $ runInBase . (\(WidgetT w) -> w ref reader') restoreM = WidgetT . const . const . restoreM +-- | @since 1.4.38 +instance MonadUnliftIO m => MonadUnliftIO (WidgetT site m) where + {-# INLINE askUnliftIO #-} + askUnliftIO = WidgetT $ \ref r -> + withUnliftIO $ \u -> + return (UnliftIO (\(WidgetT w) -> unliftIO u $ w ref r)) instance Monad m => MonadReader site (WidgetT site m) where ask = WidgetT $ \_ hd -> return (rheSite $ handlerEnv hd) local f (WidgetT g) = WidgetT $ \ref hd -> g ref hd @@ -511,6 +518,12 @@ instance MonadBaseControl b m => MonadBaseControl b (HandlerT site m) where liftBaseWith $ \runInBase -> f $ runInBase . (\(HandlerT r) -> r reader') restoreM = HandlerT . const . restoreM +-- | @since 1.4.38 +instance MonadUnliftIO m => MonadUnliftIO (HandlerT site m) where + {-# INLINE askUnliftIO #-} + askUnliftIO = HandlerT $ \r -> + withUnliftIO $ \u -> + return (UnliftIO (unliftIO u . flip unHandlerT r)) instance MonadThrow m => MonadThrow (HandlerT site m) where throwM = lift . monadThrow diff --git a/yesod-core/yesod-core.cabal b/yesod-core/yesod-core.cabal index 3dc85c18..84ae5ab0 100644 --- a/yesod-core/yesod-core.cabal +++ b/yesod-core/yesod-core.cabal @@ -70,6 +70,7 @@ library , auto-update , semigroups , byteable + , unliftio-core exposed-modules: Yesod.Core Yesod.Core.Content