packages feed

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