Вл
Size: a a a
Вл
Вл
Вл
NK
ЗП
Вл
NK
Вл
NK
Вл
Вл
Вл
Вл
Вл
к
к
newtype Fix' f = Fix' { unFix' :: f (Fix' f) }
cata' :: Functor f => (f a -> a) -> (Fix' f -> a)
cata' alg = alg . fmap (cata' alg) . unFix'
newtype FixF f r = FixF (f r) deriving Functor
type Fix f = Fix' (FixF f)
pattern Fix :: f (Fix f) -> Fix f
pattern Fix f = Fix' (FixF f)
unFix :: Fix f -> f (Fix f)
unFix (Fix f) = f
cata :: Functor f => (f a -> a) -> (Fix f -> a)
cata alg = cata' (\(FixF x) -> alg x)
к
к
k