fix -package:incipit-base -is:module package:data-fix

A fix-point type.
Fixpoint data types Fixpoint types and recursion schemes. If you define your AST as fixpoint type, you get fold and unfold operations for free. Thanks for contribution to: Matej Kollar, Herbert Valerio Riedel
Fold Fix.
>>> let fp = unfoldFix (\i -> if i < 4 then Cons i (i + 1) else Nil) (0 :: Int)

>>> foldFix (elimListF 0 (+)) fp
6
Monadic foldFix.
Change base functor in Fix.
Like hoistFix but fmapping over g.
Unfold Fix.
>>> unfoldFix (\i -> if i < 4 then Cons i (i + 1) else Nil) (0 :: Int)
Fix (Cons 0 (Fix (Cons 1 (Fix (Cons 2 (Fix (Cons 3 (Fix Nil))))))))
Monadic anamorphism.
Unwrap Fix.
>>> let x = unfoldFix (\i -> if i < 3 then Cons i (i + 1) else Nil) (0 :: Int)

>>> unwrapFix x
Cons 0 (Fix (Cons 1 (Fix (Cons 2 (Fix Nil)))))
Wrap Fix.
>>> let x = unfoldFix (\i -> if i < 3 then Cons i (i + 1) else Nil) (0 :: Int)

>>> wrapFix (Cons 10 x)
Fix (Cons 10 (Fix (Cons 0 (Fix (Cons 1 (Fix (Cons 2 (Fix Nil))))))))