Paramorphism
双対はApomorphism
Catamorphismの強化版
http://maoe.hatenadiary.jp/entry/20090820/1250782646
code:hs
para :: (a -> (a, b) -> b) -> b -> a -> b
para f z [] = z
para f z (x:xs) = f x (xs, para f z xs)
Catamorphism(foldr)の定義と見比べてみる
code:hs
para :: (a -> (a, b) -> b) -> b -> a -> b
cata :: (a -> b -> b) -> b -> a -> b
para f z [] = z
cata f z [] = z
para f z (x:xs) = f x (xs, para f z xs)
cata f z (x:xs) = f x (cata f z xs)
(xs, ..の部分で元のobject xsも保存している箇所だけが異なる
Paramorphismの練習
haskell - What are paramorphisms? - Stack Overflow
Paramorphism - Wikipedia