
Data.Generics.Fixplate.Morphisms 




Description 
Recursion schemes, also known as scary named folds...


Synopsis 

cata :: Functor f => (f a > a) > Mu f > a   para :: Functor f => (f (Mu f, a) > a) > Mu f > a   para' :: Functor f => (Mu f > f a > a) > Mu f > a   paraList :: (Functor f, Foldable f) => (Mu f > [a] > a) > Mu f > a   ana :: Functor f => (a > f a) > a > Mu f   apo :: Functor f => (a > f (Either (Mu f) a)) > a > Mu f   hylo :: Functor f => (f a > a) > (b > f b) > b > a   zygo_ :: Functor f => (f b > b) > (f (b, a) > a) > Mu f > a   zygo :: Functor f => (f b > b) > (f (b, a) > a) > Mu f > (b, a)   histo :: Functor f => (f (Attr f a) > a) > Mu f > a   futu :: Functor f => (a > f (CoAttr f a)) > a > Mu f   cataM :: (Monad m, Traversable f) => (f a > m a) > Mu f > m a   cataM_ :: (Monad m, Traversable f) => (f a > m a) > Mu f > m ()   paraM :: (Monad m, Traversable f) => (f (Mu f, a) > m a) > Mu f > m a   paraM_ :: (Monad m, Traversable f) => (f (Mu f, a) > m a) > Mu f > m ()   paraM' :: (Monad m, Traversable f) => (Mu f > f a > m a) > Mu f > m a 



Classic ana/cata/para/hylomorphisms



A catamorphism is the generalization of right fold from lists to trees.



A paramorphism is a more general version of the catamorphism.



Another version of para (a bit less natural in some sense).



A list version of para (compare with Uniplate)



An anamorphism is simply an unfold. Probably not very useful in this context.



An apomorphism is a generalization of the anamorphism.



A hylomorphism is the composition of a catamorphism and an anamorphism.


Zygomorphisms



A zygomorphism is a basically a catamorphism inside another catamorphism.
It could be implemented (somewhat wastefully) by first annotating each subtree
with the corresponding values of the inner catamorphism (synthCata), then running
a paramorphims on the annotated tree:
zygo_ g h == para u . synthCata g
where
u = h . fmap (first attribute) . unAnn
first f (x,y) = (f x, y)




Futu and histomorphisms



Histomorphism. This is a kind of glorified cata/paramorphism, after all:
cata f == histo (f . fmap attribute)
para f == histo (f . fmap (\t > (forget t, attribute t)))



Futumorphism. This is a more interesting unfold.


Monadic versions



Monadic catamorphism.





Monadic paramorphism.





Another version of paraM.


Produced by Haddock version 2.6.1 