Monáda (funkcionální programování): Porovnání verzí

Smazaný obsah Přidaný obsah
m +Kategorie:Teorie kategorií
m +odkazy
Řádek 1:
'''Monáda''' je funktoriální datový typ vybavený dvěma přirozenými transformacemi umožňujícími asociativní skládání operací nad monádami. Formálně je monáda [[Monoid|monoidem]] v kategorii [[Funktor|endofunktorů]] v kategorii typů (v [[Haskell]]u kategorie '''Hask'''). Obecně je-li <math>(\mathcal{C},\otimes,I)</math> tenzorová kategorie (kde <math>\otimes</math> je bifunktor a <math>I \in \mathrm{Ob}(\mathcal{C})</math>), monády jsou monoidy v <math>([\mathcal{C},\mathcal{C}],\circ,I)</math>.
 
[[Přirozená transformace|Přirozené transformace]] jsou u každé monády <math>T</math> multiplikace <math>\mu:T^2 \rightarrow T</math> a jednotka <math>\eta:I \rightarrow T</math> splňující <math>\mu \circ \mu T = \mu \circ T\mu (T^3 \rightarrow T)</math> a <math>\mu \circ \eta T = 1 = \mu \circ T\eta</math>. Ve funkcionálním programování se tyto operace zpravidla nazývají '''join''' a '''unit'''. Příkladem monády je [[continuation|kontinuace]], kde <math>\eta</math> je funkcí z <math>A</math> do <math>(A \rightarrow R) \rightarrow R</math> definovaná jako <math>\eta x=\lambda f.f(x)</math> a
speciální operace vázání je <math>m >\!\!\!>\!\!= f = \lambda g.m(\lambda x.f(x)(g))</math>,
přičemž <math>\mu x</math> je <math>x >\!\!\!>\!\!= \lambda y.y</math>.
Řádek 9:
==Příklad==
 
[[Continuation|Kontinuace]] v C++ lze reprezentovat (s využitím statického [[polymorfismus|polymorfismu]]) následující třídou:
 
<source lang="cpp">