ЗП
Size: a a a
ЗП
к
к
ЗП
к
к
Nat = Z | S Nat
->
NatF r = Z | S r
Nat = Fix NatF
Fix f = Fix (f (Fix f))
->
FIxF f r = Fix (f r)
Fix f = OldFix (FixF f)
ЗП
k
к
к
ЗП
NK
ЗП
к
ЗП
newtype MyFix f = MyFix { unMyFix :: f (MyFix f) }
newtype MyFixF f a = MyFixF { unMyFixF :: f a } deriving (Functor)
type instance Base (MyFix f) = MyFixF f
instance Functor f => Recursive (MyFix f) where
project (MyFix f) = MyFixF f
instance Functor f => Corecursive (MyFix f) where
embed (MyFixF fa) = MyFix fa
cata' :: Functor f => (f a -> a) -> (MyFix f -> a)
cata' alg = cata (alg . unMyFixF)
MyFixF f
изоморфен f
newtype
но определение не поменялосьЗП
type instance Base (Fix f) = f
分
分