아마 가장 큰 chronomorphism의 사용은 명명 된 구문 트리를 축소하는 것입니다. 특히 아직 처리되지 않은 이름과 에이 이미 처리 된 이름을 참조 할 수 있습니다.
당신이 chronomorphisms로 할 수있는 또 다른 일은 동역학을 다시 쓰는 것입니다! 동 각 변성에 관한 자세한 내용은 here을 참조하십시오. 그들이 인용 한 사례 중 하나는 카탈로니아 어 숫자입니다. 나는 하스켈에게 그것을 아래 번역했다.
import Data.Functor.Foldable
import Control.Arrow
import Control.Comonad.Cofree
dyna :: (Functor f) => (f (Cofree f a) -> a) -> (c -> f c) -> c -> a
dyna a c = extract . h where h = (uncurry (:<)) . (a &&& id) . fmap h . c
catalan :: Int -> Int
catalan = dyna coalgebra project where
coalgebra :: ListF Int (Cofree ListF Int) -> Int
coalgebra Nil = 1
coalgebra (Cons x table) = sum $ zipWith (*) xs (reverse xs)
where xs = take x table
this도 유용 할 수 있습니다. 그것은 futumorphism을 사용하여 나무를 만들고 그것을 찢어 버리는 변성 작용을 사용한 예가 있습니다 (이것이 폐색되었지만). 물론,이지도는 사실 연대순 변이의 또 다른 전문화입니다.
아마도 [email protected]의 질문을 퍼팅 – palik
도 https://stackoverflow.com/a/37002861/2789312 – palik
https://gist.github.com/danidiaz/e5debcaf531838eb6e2afd3ef3b34d60 – danidiaz