di-monad 1.3.4 → 1.3.5
raw patch · 3 files changed
+68/−2 lines, 3 filesdep +conduitdep +resourcet
Dependencies added: conduit, resourcet
Files
- CHANGELOG.md +5/−0
- di-monad.cabal +21/−2
- lib/Di/Monad.hs +42/−0
CHANGELOG.md view
@@ -1,3 +1,8 @@+# Version 1.3.5++* Add optional support for `conduit` and `resourcet`.++ # Version 1.3.4 * Fix typo in `unliftio-core` Cabal flag.
di-monad.cabal view
@@ -1,9 +1,9 @@ cabal-version: 1.18 name: di-monad-version: 1.3.4+version: 1.3.5 author: Renzo Carbonara maintainer: renλren.zone-copyright: Renzo Carbonara 2017-2018+copyright: Renzo Carbonara 2017 license: BSD3 license-file: LICENSE.txt extra-source-files: README.md CHANGELOG.md@@ -49,6 +49,16 @@ manual: True default: True +flag resourcet+ description: Library support: resourcet+ manual: True+ default: True++flag conduit+ description: Library support: conduit+ manual: True+ default: True+ library hs-source-dirs: lib default-language: Haskell2010@@ -92,4 +102,13 @@ if flag(unliftio-core) cpp-options: -DFLAG_unliftio_core build-depends: unliftio-core++ if flag(resourcet)+ cpp-options: -DFLAG_resourcet -DFLAG_primitive -DFLAG_unliftio_core+ build-depends: resourcet, primitive, unliftio-core++ if flag(conduit)+ cpp-options: -DFLAG_conduit -DFLAG_primitive -DFLAG_unliftio_core+ -DFLAG_resourcet+ build-depends: conduit, primitive, unliftio-core, resourcet
lib/Di/Monad.hs view
@@ -122,6 +122,14 @@ import Streaming.Internal qualified as S #endif +#ifdef FLAG_resourcet+import Control.Monad.Trans.Resource.Internal qualified as R+#endif++#ifdef FLAG_conduit+import Data.Conduit.Internal qualified as C+#endif+ import Di.Core (Di) import Di.Core qualified as Di @@ -610,6 +618,40 @@ S.Step fs -> S.Step (local g <$> fs) S.Effect ms -> S.Effect (local g <$> ms) S.Return r -> S.Return r+#endif++#ifdef FLAG_resourcet+instance R.MonadResource m => R.MonadResource (DiT level path msg m) where+ {-# INLINE liftResourceT #-}+ liftResourceT = lift . R.liftResourceT++instance+ (MonadDi level path msg m)+ => MonadDi level path msg (R.ResourceT m)+ where+ {-# INLINE local #-}+ local f = \(R.ResourceT g) -> R.ResourceT (local f . g)+#endif++#ifdef FLAG_conduit+instance+ (MonadDi level path msg m)+ => MonadDi level path msg (C.Pipe l i o u m)+ where+ {-# INLINEABLE local #-}+ local f = \case+ C.HaveOutput p o -> C.HaveOutput (local f p) o+ C.NeedInput p c -> C.NeedInput (local f . p) (local f . c)+ C.Done x -> C.Done x+ C.PipeM mp -> C.PipeM (local f <$> local f mp)+ C.Leftover p i -> C.Leftover (local f p) i++instance+ (MonadDi level path msg m)+ => MonadDi level path msg (C.ConduitT i o m)+ where+ {-# INLINE local #-}+ local f = \(C.ConduitT k) -> C.ConduitT (local f . k) #endif --------------------------------------------------------------------------------