Когда какое-то нетривиальное преобразование дает id, то это потом можно приспособить для нужд народного хозяйства.
В бананах в космосе функция
copy :: Functor f => Rec f -> Rec f
copy (In x) = In (fmap copy x)
тождественный id, на основании чего легким движением руки из неё получается катаморфизм. Меняем применение конструктора In :: f (Rec f) -> Rec f не на себя, а на произвольную phi :: f a -> a и получаем
cata :: Functor f => (f a -> a) -> Rec f -> a
cata phi (In x) = phi (fmap (cata phi) x)
Здесь id задана на Rec f, что позволяет покрыть все рекурсивные типы, для которых можно написать instance Functor.
no subject
Date: 2007-12-12 11:34 am (UTC)В бананах в космосе функция
тождественный id, на основании чего легким движением руки из неё получается катаморфизм. Меняем применение конструктора In :: f (Rec f) -> Rec f не на себя, а на произвольную phi :: f a -> a и получаем
Здесь id задана на Rec f, что позволяет покрыть все рекурсивные типы, для которых можно написать instance Functor.
Я и стал думать, что можно из s и s' вытащить...