adunk egy sor példát, majd egy globálisabb megközelítést katamorfizmusok, a Haskell programozási nyelv.
IterationEdit
az iterációs lépés előírásai természetes számokhoz vezetnek, mint kezdeti objektumhoz.
fontolja meg a functor fmaybe
egy adattípus leképezése b
egy adattípushoz fmaybe b
, amely tartalmazza az egyes kifejezések másolatát a b
valamint egy további kifejezést Nothing
(haskellben ez az, amit a Maybe
csinál). Ez kódolható egy kifejezés és egy függvény használatával. Tehát egy StepAlgebra példánya tartalmazzon egy függvényt is fmaybe b
to b
, amely leképezi Nothing
egy rögzített kifejezésre nil
of b
, ahol a másolt kifejezések műveletei next
lesznek.
List foldEdit
rögzített típus esetén a
vegye figyelembe a functor leképezési típusokat b
e két típus terméktípusához. Ezenkívül hozzáadunk egy kifejezést is Nil
ehhez a kapott típushoz. Az f-algebra most leképezi Nil
valamilyen speciális kifejezésre nil
of b
vagy “egyesítsen” egy párot (a felépített típus bármely más kifejezését) a b
kifejezésbe. Egy pár ilyen összevonása kódolható a a -> b -> b
típus függvényeként.
fa foldEdit
rögzített típus esetén a
, vegye figyelembe a functor leképezési típusokat b
olyan típusra, amely tartalmazza a a
minden egyes kifejezésének másolatát, valamint a b
‘s (a b
típusú két példány terméktípusának feltételei). Az algebra a b
függvényből áll, amely vagy egy a
kifejezésre vagy két b
kifejezésre hat. Egy pár egyesítése két függvényként kódolható a -> b
ill. b -> b -> b
.
General caseEdit
a kezdeti algebrák mélyebb kategóriájú elméleti tanulmányai azt mutatják, hogy a functor saját kezdeti algebrájára történő alkalmazásából kapott F-algebra izomorf.
az erős típusú rendszerek lehetővé teszik számunkra, hogy elvontan meghatározzuk a functor kezdeti algebrájátf
rögzített pontként a = f a. A rekurzívan definiált katamorfizmusok most már egyetlen sorban kódolhatók, ahol az esetelemzést (mint a fenti különböző példákban) az fmap kapszulázza. Mivel az utóbbiak tartománya a f
képében lévő objektumok, a katamorfizmusok értékelése oda-vissza ugrik a a
és a f a
között.
most ismét az első példa, de most keresztül halad a talán functor kijavítani. A talán functor ismételt alkalmazása típusláncot generál, amelyet azonban a fixpont tétel izomorfizmusa egyesíthet. Bemutatjuk a zero
kifejezést, amely a Maybes Nothing
– ből származik, és azonosítunk egy utódfunkciót a Just
ismételt alkalmazásával. Így keletkeznek a természetes számok.
és most ismét a fa példa. Ehhez meg kell adnunk a fa tároló adattípusát, hogy beállíthassuk a fmap
(nem kellett megtennünk a Maybe
functor számára, mivel ez a standard prelude része).
data Tcon a b = TconL a | TconR b binstance Functor (Tcon a) where fmap f (TconL x) = TconL x fmap f (TconR y z) = TconR (f y) (f z)
type Tree a = Fix (Tcon a) -- the initial algebraend :: a -> Tree aend = Iso . TconLmeet :: Tree a -> Tree a -> Tree ameet l r = Iso $ TconR l r
treeDepth :: Algebra (Tcon a) Integer -- again, the treeDepth f-algebra exampletreeDepth (TconL x) = 1treeDepth (TconR y z) = 1 + max y z
a következő érték 4-re változik:cata treeDepth $ meet (end "X") (meet (meet (end "YXX") (end "YXY")) (end "YY"))