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