一次展開一層結構
Anamorphisms ,或展開,模型原始的 corecursion。ana
逐層構建一個固定點,使用餘代數函式(或展開函式 )生成每個新圖層。ana
需要 Functor
例項作為模板型別 f
。
ana::Functor f => (a -> f a) -> a -> Fix f
ana f = Fix . fmap (ana f) . f
-- list example
unfoldr :: (b -> Maybe (a, b)) -> b -> List a
unfoldr f = ana coalg
where coalg x = case f x of
Nothing -> Nil_
Just (x, y) -> Cons_ x y
請注意,ana
和 cata
是雙重的。型別和實現是彼此的映象。