Difference between revisions of "Monade"

From HaskellWiki
Jump to navigation Jump to search
m
Line 1: Line 1:
Monadele sunt structuri algebrice provenite din topologia algebrica sau/si din teoria categoriilor.
+
Monadele sunt structuri algebrice (M,>>= ,return) provenite din topologia algebrica sau/si din teoria categoriilor. Au intrat insa in "computer science" pe usa din dos :) a cresteri productivitatii si extensibilitatii.
   
  +
Avantajul major al folosirii monadelor il constituie faptul ca pot separa DESCRIEREA unei succesiuni de calcule(pe care o exprimati in Haskell in do-notatie) atat de MODUL LOR DE INLANTUIRE (exprimat prin operatorul "bind")cat si de FORMA STRUCTURILOR DE DATE (exprimata prin constructorul de date al monadei si functia return care produce valori monadice).
Cei interesati de aspectele matematice pot consulta (in engleza) celebrul volum
 
  +
de Prof.Em. Michael Barr si Prof.Em. Charles Wells - Toposes, Triples and Theories,[http://www.cwru.edu/artsci/math/wells/pub/ttt.html de pe pagina sa de internet.] Sunteti rugati insa sa nu-l redistribuiti !!
 
  +
Uluitor este ca programatorii sunt obisnuiti cu faptul ca daca modifica structurile de date atunci trebuie sa modifice si programul care face calcule, prelucrari cu ele !! Si se supun acestei corvezi zi de zi !! Totusi daca legatura dintre universul structurii datelor s-ar face printr-un numar mic de functi si operatori (vom vedea ca se poate reduce la 2 operatii, bind si return) atunci acest dezavantaj ar disparea !! La ACEST lucru sunt foarte folositoare monadele. Invatati deci programarea in stil monadic (eng- monadic style) si veti obtine o crestere neasteptata a productivitatii muncii de programare.
  +
  +
Cei interesati de programarea in Haskell isi pot imagina monadele ca niste structuri algebrice (M,>>= ,return) formate dintr-o multime de valori monadice (CARE NU ESTE M - dar vom vedea imediat ca este construita cu ajutorul lui M) si doi operatori numiti "bind" si "return".
  +
  +
M - este pentru programatorul in Haskell UN CONSTRUCTOR DE TIP POLIMORFIC. Ati mai intalnit asemenea constructori la liste si arbori. Dars e pot folosi si alte structuri, de exemplu Parsere, rezultand [[monada parserelor]].
  +
  +
>>= este o functie polimorfica, definita in bibliotecile standard (vedeti clasa Monad) cu semnatura, cu tipul: >>= :: M a -> ( a -> M b) -> M b Ea serveste la combinarea unei valori monadice (provenita din ceva de tip a - variabil) cu o functie care pe baza unei valori de tip a obtine o valoare monadica M b (care incapsuleaza o valoare de tip b) si obtine in final un M b. Este o generalizare subtila a aplicarii de functie. De altfel la monada Id numita si monada identitate se vede imediat ca >>= e generalizarea aplicarii functiei.
  +
  +
Despre "return": Calculele cu valori monadice trebuie sa porneasca cu o valoare initiala. Functia polimorfica folosita in fiecare monada pentru a transforma valorile obisnuite, de diverse tipuri a, in valori monadice de tipul M a este functia return :: a -> M a EA SERVESTE LA INJECTAREA DE VALORI UZUALE IN UNIVERSUL MONADEI.
  +
  +
De unde sa incepeti studiul acestui nou stil de programare bazat pe calcule cu valori monadice ?
  +
Un frumos exemplu gasiti la pagina 407 in capitolul "Programming with actions" al volumului "The Craft of Functional Programming - second edition" semnat de Simon Thompson si publicat de Addison Wessley. Acolo Simon incepe prin a explica felul in care se transforma calculul sumei frunzelor unui arbore din maniera clasica, recursiva in maniera monadica (cvasi imperativa ca mod de scriere).
  +
 
Cei interesati de aspectele matematice ale monadelor pot consulta (in engleza) celebrul volum de Prof.Em. Michael Barr si Prof.Em. Charles Wells - Toposes, Triples and Theories,[http://www.cwru.edu/artsci/math/wells/pub/ttt.html de pe pagina sa de internet.] Sunteti rugati insa sa nu-l redistribuiti !!
   
 
Nota: Pe vremea cand a fost scris volumul monadele se numeau Triple (eng. Triples).
 
Nota: Pe vremea cand a fost scris volumul monadele se numeau Triple (eng. Triples).
  +
  +
Aceasta pagina este in dezvoltare sau pur si simplu mai trebuie dezvoltata. Dan Popa va inviuta la cursurile si seminariile sale de la Universitatea din Bacau, Romania.
   
 
[http://www.haskell.org/haskellwiki/Ro/Haskell <= Inapoi la pagina principala Ro/Haskell ]
 
[http://www.haskell.org/haskellwiki/Ro/Haskell <= Inapoi la pagina principala Ro/Haskell ]

Revision as of 10:20, 15 January 2007

Monadele sunt structuri algebrice (M,>>= ,return) provenite din topologia algebrica sau/si din teoria categoriilor. Au intrat insa in "computer science" pe usa din dos :) a cresteri productivitatii si extensibilitatii.

Avantajul major al folosirii monadelor il constituie faptul ca pot separa DESCRIEREA unei succesiuni de calcule(pe care o exprimati in Haskell in do-notatie) atat de MODUL LOR DE INLANTUIRE (exprimat prin operatorul "bind")cat si de FORMA STRUCTURILOR DE DATE (exprimata prin constructorul de date al monadei si functia return care produce valori monadice).

Uluitor este ca programatorii sunt obisnuiti cu faptul ca daca modifica structurile de date atunci trebuie sa modifice si programul care face calcule, prelucrari cu ele !! Si se supun acestei corvezi zi de zi !! Totusi daca legatura dintre universul structurii datelor s-ar face printr-un numar mic de functi si operatori (vom vedea ca se poate reduce la 2 operatii, bind si return) atunci acest dezavantaj ar disparea !! La ACEST lucru sunt foarte folositoare monadele. Invatati deci programarea in stil monadic (eng- monadic style) si veti obtine o crestere neasteptata a productivitatii muncii de programare.

Cei interesati de programarea in Haskell isi pot imagina monadele ca niste structuri algebrice (M,>>= ,return) formate dintr-o multime de valori monadice (CARE NU ESTE M - dar vom vedea imediat ca este construita cu ajutorul lui M) si doi operatori numiti "bind" si "return".

M - este pentru programatorul in Haskell UN CONSTRUCTOR DE TIP POLIMORFIC. Ati mai intalnit asemenea constructori la liste si arbori. Dars e pot folosi si alte structuri, de exemplu Parsere, rezultand monada parserelor.

>>= este o functie polimorfica, definita in bibliotecile standard (vedeti clasa Monad) cu semnatura, cu tipul: >>= :: M a -> ( a -> M b) -> M b Ea serveste la combinarea unei valori monadice (provenita din ceva de tip a - variabil) cu o functie care pe baza unei valori de tip a obtine o valoare monadica M b (care incapsuleaza o valoare de tip b) si obtine in final un M b. Este o generalizare subtila a aplicarii de functie. De altfel la monada Id numita si monada identitate se vede imediat ca >>= e generalizarea aplicarii functiei.

Despre "return": Calculele cu valori monadice trebuie sa porneasca cu o valoare initiala. Functia polimorfica folosita in fiecare monada pentru a transforma valorile obisnuite, de diverse tipuri a, in valori monadice de tipul M a este functia return :: a -> M a EA SERVESTE LA INJECTAREA DE VALORI UZUALE IN UNIVERSUL MONADEI.

De unde sa incepeti studiul acestui nou stil de programare bazat pe calcule cu valori monadice ? Un frumos exemplu gasiti la pagina 407 in capitolul "Programming with actions" al volumului "The Craft of Functional Programming - second edition" semnat de Simon Thompson si publicat de Addison Wessley. Acolo Simon incepe prin a explica felul in care se transforma calculul sumei frunzelor unui arbore din maniera clasica, recursiva in maniera monadica (cvasi imperativa ca mod de scriere).

Cei interesati de aspectele matematice ale monadelor pot consulta (in engleza) celebrul volum de Prof.Em. Michael Barr si Prof.Em. Charles Wells - Toposes, Triples and Theories,de pe pagina sa de internet. Sunteti rugati insa sa nu-l redistribuiti !!

Nota: Pe vremea cand a fost scris volumul monadele se numeau Triple (eng. Triples).

Aceasta pagina este in dezvoltare sau pur si simplu mai trebuie dezvoltata. Dan Popa va inviuta la cursurile si seminariile sale de la Universitatea din Bacau, Romania.

<= Inapoi la pagina principala Ro/Haskell