原始的核心运动

同态模型原始核心运动。在展开的每次迭代中,展开函数可以返回新种子或整个子树。

apo::Functor f => (a -> f (Either (Fix f) a)) -> a -> Fix f
apo f = Fix . fmap (either id (apo f)) . f

请注意,apopara双重的。翻转中的箭头; para 中的元组与 apo 中的 Either 是双重的,并且实现是彼此的镜像。