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 +8/−0
- polysemy-methodology.cabal +1/−1
- src/Polysemy/Methodology.hs +41/−0
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+