Die wahrscheinlich größte Verwendung von Chronomorphismen ist das Kollabieren eines benannten Syntaxbaums. Insbesondere können Sie auf Namen verweisen, die noch nicht verarbeitet wurden, sowie auf Namen, die bereits verarbeitet haben.
Eine andere Sache, die Sie mit Chronomorphismen tun können, ist Dynamophismen neu schreiben! Sie können mehr über Dynamorphismen here lesen. Eines der Beispiele, die sie anführen, sind die katalanischen Zahlen. Ich habe es unten in Haskell übersetzt.
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
Sie könnten auch this nützlich finden. Es hat ein Beispiel, das einen Futumorphismus verwendet, um einen Baum zu bauen, und einen Katamorphismus, um ihn abzubauen (obwohl dies okkludiert ist). Natürlich ist diese Karte eine weitere Spezialisierung des Chronomorphismus.
vielleicht bei [email protected] die Frage stellen kann – palik
helfen auch https://stackoverflow.com/a/37002861/2789312 – palik
https://gist.github.com/danidiaz/e5debcaf531838eb6e2afd3ef3b34d60 – danidiaz