Difference between revisions of "Pseudoconstructors over monadic values"

From HaskellWiki
Jump to navigation Jump to search
Line 1: Line 1:
 
----
 
[[Image:Haskelllogo-small-flag-RO-8.jpg|center|Ro/Haskell Community by Dan Popa]]
  +
----
  +
 
==. Introducere ==
 
==. Introducere ==
   
Line 42: Line 46:
   
 
==. Sintaxa ==
 
==. Sintaxa ==
Pseudoconstructorii se folosesc ca si constructorii. Singura diferenta SINTACTICA este faptul ca fiind functii se vor scrie cu '''min''uscula in loc de '''M'''ajuscula.
+
Pseudoconstructorii se folosesc ca si constructorii. Singura diferenta SINTACTICA este faptul ca fiind functii se vor scrie cu '''min'''uscula in loc de '''M'''ajuscula.
   
 
==. Transformarea Constrcutorilor in Pseudoconstructori ==
 
==. Transformarea Constrcutorilor in Pseudoconstructori ==
Line 71: Line 75:
   
 
The paper is introducing [[Pseudoconstructors over monadic values]] as a way of building modular trees without [[data]] or Haskell extensions. [http://www.haskell.org/sitewiki/images/7/7d/POPA_D.pdf http://www.haskell.org/sitewiki/images/7/7d/POPA_D.pdf]. Modular adaptable interpreters for extensible languages - like [[Rodin]] - become now easy to build, without the need of any Haskell extensions. [[2008/Rezumat1]].
 
The paper is introducing [[Pseudoconstructors over monadic values]] as a way of building modular trees without [[data]] or Haskell extensions. [http://www.haskell.org/sitewiki/images/7/7d/POPA_D.pdf http://www.haskell.org/sitewiki/images/7/7d/POPA_D.pdf]. Modular adaptable interpreters for extensible languages - like [[Rodin]] - become now easy to build, without the need of any Haskell extensions. [[2008/Rezumat1]].
 
 
----
 
[[Image:Haskelllogo-small-flag-RO-8.jpg|center|Ro/Haskell Community by Dan Popa]]
 
   
   

Revision as of 11:36, 20 July 2009


Ro/Haskell Community by Dan Popa

. Introducere

Uzual, constructia DSL-urilor - mici limbaje de programare specializate - se face pornind de la o semantica bazata pe sintaxa. Sintaxa abstracta este de ajuns, nu e nevoie de o sintaxa concreta.

Ori sintaxa abstracta este strans legata de arborii sintactici abstracti si de arborii operatoriali.

In Haskell, de obicei, acesti arbori sunt declarati folosind: data.

Dezavantajul este ca aceste declaratii data nu sunt modulare. Efect: este greu sa implementam limbaje extensibile din cauza dificultatii de a extinde , printre altele, tipul de date al arborilor din reprezentarea intermediara.

Solutii diverse au fost, de-a lungul timpului, propuse:

- Structuri compuse cu ajutorul tipului MayBe Referinte:... se vor adauga

- Structuri de date compuse cu operatori din teoria categoriilor. Referinte: se vor adauga

- Turnuri de date utilizate impreuna cu pseudomonade Referinte: ... se vor adauga

- Extinderea limbajului Haskell cu un nou fel de declaratii de arbori. Asa numitele Open Data Types - Tipuri de date deschise Referinte: ... se vor adauga

Toate aveau dezavantaje cum ar fi: - complexitatea declaratiilor structurilor de date mai mare ca la arbori (ca lungime a programului) - operatii si operatori care presupuneau cunostinte in plus - dificultati de traducere de la arbori uzuali la noile date (nu era evidenta transformarea) - deci si dificultati de adaptare a software-ului existent

. Noutatea: Pseudoconstructorii sunt functii

Toate abordarile anterioare propuneau structuri de date omitand cateva aspecte importante: - Haskell este un limbaj FUNCTIONAL deci putem opera cu functii - Constructorii tipurilor data sunt similari unor functii - au si semnatura / tip - Haskell fiind limbaj cu LAZY-EVALUATION - un set de apeluri de functii succesive (sau compuse explicit) va ramane in acea forma - arborescenta - sau intr-o forma izomorfa pina va fi absoluta nevoie sa fie evaluat. Deci va fi practic un arbore stocat.

Concluzia: se pot inlocui CONSTRUCTORII de date ai declaratiilor data cu un simplu set de functii. Concluzia a II-a: Atunci cand se implementeaza semantici monadice modulare aceste functii vor manipula valori monadice.

. Sintaxa

Pseudoconstructorii se folosesc ca si constructorii. Singura diferenta SINTACTICA este faptul ca fiind functii se vor scrie cu minuscula in loc de Majuscula.

. Transformarea Constrcutorilor in Pseudoconstructori

Simplu: Scrieti minuscula in loc de majuscula. Atat. La semantici monadice: Scrieti minuscula in loc de majuscula in instructiunile return. Atat.

Si, fireste nu uitati sa declarati functiile respective.

. Avantaje

Deoarece au sintaxa cvasi-similara cu a Constructorilor rezulta: - complexitatea declaratiilor in aplicatie a structurilor de date ESTE EXACT ca la arbori (ca lungime a programului). - alte cunostinte in plus decat notiunea de functie nu se cer - Transformarea de la arbori uzuali la noile date / structuri este banala, vedeti mai sus, se schimba o litera. - lipsesc dificultatile de adaptare a software-ului existen

. Paper concerning pseudoconstructors over monadic values 2008

Dan Popa, "Modular evaluation and interpreters using monads and type classes in Haskell" , Studii si Cercetari Ştiinţifice, Seria Matematica, Univ. Bacău, (18) 2008. - acceptat spre publicare . An Open Office (.sxw) file is available here: Download .sxw After loading the .sxw in the Open Office, press the PDF button from the toolbar to produce your own .pdf file. Or Official PDF of the paper for <DOWNLOAD> , having the following title:

Direct modular evaluation of expressions using the monads and type classes in Haskell by DAN V. POPA UNIVERSITATEA DIN BACĂU STUDII ŞI CERCETĂRI ŞTIINŢIFICE Seria: MATEMATICĂ Nr. 18 (2008), pag. 233 – 248

The paper is introducing Pseudoconstructors over monadic values as a way of building modular trees without data or Haskell extensions. http://www.haskell.org/sitewiki/images/7/7d/POPA_D.pdf. Modular adaptable interpreters for extensible languages - like Rodin - become now easy to build, without the need of any Haskell extensions. 2008/Rezumat1.


Pagina creata pe 20 iulie 2009 dupa o lucrare din ....


Pagina in dezvoltare... inca.


Pagina indexata la indexul Categories:Ro


<= Inapoi la pagina principala Ro/Haskell.

<- Inapoi la Intrebarile incepatorului Ro/Haskell.