packages feed

monadic-recursion-schemes 0.1.4.2 → 0.1.5.0

raw patch · 3 files changed

+37/−1 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Data.Functor.Foldable.Monadic: comutuM :: (Monad m, Traversable (Base t), Corecursive t) => (a -> m (Base t (Either a a))) -> (a -> m (Base t (Either a a))) -> a -> m t
+ Data.Functor.Foldable.Monadic: comutuM' :: (Monad m, Traversable (Base t), Corecursive t) => (b -> a) -> (a -> m (Base t a)) -> b -> m t
+ Data.Functor.Foldable.Monadic: mutuM :: (Monad m, Traversable (Base t), Recursive t) => (Base t (a, a) -> m a) -> (Base t (a, a) -> m a) -> t -> m a
+ Data.Functor.Foldable.Monadic: mutuM' :: (Monad m, Traversable (Base t), Recursive t) => (a -> b) -> (Base t a -> m a) -> t -> m b

Files

CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history for monadic-recursion-schemes +## 0.1.5.0 -- 2020-05-14++* add mutuM and comutuM with the other variant, which has not the same type signature.+ ## 0.1.4.2 -- 2020-05-14  * add comment.
monadic-recursion-schemes.cabal view
@@ -4,7 +4,7 @@ -- http://haskell.org/cabal/users-guide/  name:                monadic-recursion-schemes-version:             0.1.4.2+version:             0.1.5.0 synopsis:            Recursion Schemes for Monadic version. description:         Yet another recursion schemes for monadic style, depends on recursion-schemes. homepage:            https://github.com/cutsea110/monadic-recursion-schemes.git
src/Data/Functor/Foldable/Monadic.hs view
@@ -19,6 +19,8 @@   , dynaM, codynaM   , dynaM', codynaM'   , dynaM'', codynaM''+  , mutuM, comutuM+  , mutuM', comutuM'   ) where  import           Control.Comonad              (Comonad (..))@@ -207,3 +209,33 @@ codynaM'' phi psi = hyloM phi g . Pure   where g (Pure  a) = psi a         g (Free fb) = return fb++-- | mutumorphism on mutual recursive+mutuM :: (Monad m, Traversable (Base t), Recursive t)+      => (Base t (a, a) -> m a) -- ^ algebra+      -> (Base t (a, a) -> m a) -- ^ algebra+      -> t -> m a+mutuM f g = g <=< mapM (liftM2 (,) <$> mutuM g f <*> mutuM f g) . project++-- | mutumorphism on recursive variant over catamorphism+mutuM' :: (Monad m, Traversable (Base t), Recursive t)+       => (a -> b)          -- ^ project+       -> (Base t a -> m a) -- ^ algebra+       -> t -> m b+mutuM' f phi = return . f <=< cataM phi++-- | comutumorphism on comutual recursive+comutuM :: (Monad m, Traversable (Base t), Corecursive t)+        => (a -> m (Base t (Either a a))) -- ^ coalgebra+        -> (a -> m (Base t (Either a a))) -- ^ coalgebra+        -> a -> m t+comutuM f g = fmap embed . mapM (either (comutuM g f) (comutuM f g)) <=< g++-- | comutumorphism on recursive variant over anamorphism+comutuM' :: (Monad m, Traversable (Base t), Corecursive t)+         => (b -> a)            -- ^ embed+         -> (a -> m (Base t a)) -- ^ coalgebra+         -> b -> m t+comutuM' f psi = anaM psi . f++