packages feed

polysemy-methodology 0.1.1.0 → 0.1.2.0

raw patch · 3 files changed

+50/−1 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Polysemy.Methodology: bindMethodology :: forall f b c r a. (Members '[Methodology b (f c)] r, Traversable f, Monad f) => Sem (Methodology (f b) (f c) : r) a -> Sem r a
+ Polysemy.Methodology: fmap2Methodology :: forall f g b c r a. (Members '[Methodology b c] r, Traversable f, Traversable g) => Sem (Methodology (f (g b)) (f (g c)) : (Methodology (g b) (g c) : r)) a -> Sem r a
+ Polysemy.Methodology: fmapMethodology :: forall f b c r a. (Members '[Methodology b c] r, Traversable f) => Sem (Methodology (f b) (f c) : r) a -> Sem r a
+ Polysemy.Methodology: traverseMethodology :: forall t f b c r a. (Members '[Methodology b (f c)] r, Traversable t, Applicative f) => Sem (Methodology (t b) (f (t c)) : r) a -> Sem r a
- Polysemy.Methodology: process :: forall b_ab34 c_ab35 r_ackS. MemberWithError (Methodology b_ab34 c_ab35) r_ackS => b_ab34 -> Sem r_ackS c_ab35
+ Polysemy.Methodology: process :: forall b_ab3z c_ab3A r_acln. MemberWithError (Methodology b_ab3z c_ab3A) r_acln => b_ab3z -> Sem r_acln c_ab3A

Files

ChangeLog.md view
@@ -1,5 +1,13 @@ # Changelog for polysemy-methodology +## v0.1.2.0++* Add `fmapMethodology`, `fmapMethodology2`, `bindMethodology` and `traverseMethodology`.++## v0.1.1.0++* Fix erroneous type signature in `endMethodologyTerminal`.+ ## v0.1.0.0  * Set of domain modelling tools for polysemy.
polysemy-methodology.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack  name:           polysemy-methodology-version:        0.1.1.0+version:        0.1.2.0 synopsis:       Domain modelling algebra for polysemy category:       Polysemy author:         Daniel Firth
src/Polysemy/Methodology.hs view
@@ -12,6 +12,7 @@ {-# OPTIONS_GHC -fplugin=Polysemy.Plugin #-} module Polysemy.Methodology where +import Control.Monad import Polysemy import Polysemy.KVStore import Polysemy.Input@@ -177,3 +178,43 @@                        -> Sem r a endMethodologyTerminal = interpret \case   Process _ -> return mempty++-- | Run a `Methodology (f b) (f c)` by way of a `Methodology b c`. Note that+-- `f` must be `Traversable`.+fmapMethodology :: forall f b c r a.+                 ( Members '[Methodology b c] r+                 , Traversable f)+                => Sem (Methodology (f b) (f c) ': r) a+                -> Sem r a+fmapMethodology = interpret \case+  Process b -> traverse (process @b @c) b++-- | Run a `Methodology (f (g b)) (f (g c))` by way of a `Methodology b c`. Note that+-- `f` and `g` must be `Traversable`.+fmap2Methodology :: forall f g b c r a.+                  ( Members '[Methodology b c] r+                  , Traversable f, Traversable g)+                 => Sem (Methodology (f (g b)) (f (g c)) ': Methodology (g b) (g c) ': r) a+                 -> Sem r a+fmap2Methodology = fmapMethodology @g @b @c . fmapMethodology @f @(g b) @(g c)++-- | Run a `Methodology (f b) (f c)` by way of a `Methodology b (f c)`. Note that+-- `f` must be both `Traversable` and `Monad`.+bindMethodology :: forall f b c r a.+                 ( Members '[Methodology b (f c)] r+                 , Traversable f, Monad f)+                => Sem (Methodology (f b) (f c) ': r) a+                -> Sem r a+bindMethodology = interpret \case+  Process b -> join <$> traverse (process @b @(f c)) b++-- | Run a `Methodology (t b) (f (t b))` by way of a `Methodology b (f c)`. Note that+-- `t` must be `Traversable` and `f` must be `Applicative`.+traverseMethodology :: forall t f b c r a.+                     ( Members '[Methodology b (f c)] r+                     , Traversable t, Applicative f)+                    => Sem (Methodology (t b) (f (t c)) ': r) a+                    -> Sem r a+traverseMethodology = interpret \case+  Process b -> sequenceA <$> traverse (process @b @(f c)) b+