Poate aceeasi functie sa aiba doua tipuri in doua programe ?

From HaskellWiki
Revision as of 22:11, 24 January 2008 by Ha$kell (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

. Explicatia in termeni de Haskell

In sistemul de tipuri al Haskell-ului tipul unei entitati este
cel mai mic tip care i se poate atribui ca urmare a rezolvarii
intregului sistem de ecuatii din intregul program. Ecuatii in tipuri.

Ce intelegem prin cel mai mic tip ? Cel mai mic tip e inteles in sensul: ('c',1) poate fi si un (a,Int) si un (Char,x) si un (Char,Int). Dar este cel mai mic ultimul.

Intre tipuri se stabileste deci o relatie de ordine, bazata pe generalitate sau - echivalent - pe posibilitatea de a obtine un tip din altul prin particularizare.

Cand rezolvi (in tipuri!) o singura ecuatie cum este y f = f (y f) s-ar putea sa obtii ca cea mai mica solutie (a sistemului format de o ecuatie)va fi:

y :: (a->a)-> a

Daca insa acea formula y f = f (y f) apare in program impreuna cu alte ecuatii, poti obtine dupa rezolvarea sistemului particularizari (mai specifice daca vrei) ale rezultatului anterior. De exemplu cu ajutorul altor ecuatii din program sistemul de inferente de tipuri poate decide ca acel a de mai sus poate fi particularizat (deci obtine un tip mai mic ca ordine a tipurilor) devenind b-> c .

Deci y::((b->c)-> (b->c)) -> (b->c) in acest caz.

Dintre cele doua, y :: (a->a)-> a si y::((b->c)-> (b->c)) -> (b->c)

sistemul Haskell o va alege pe cea mai mica, pe cea mai particulara,pe a doua ! Totul depinde deci (in asemenea cazuri de ambiguitate aparenta) de ce alte ecuatii mai exista in program.


. Explicatia prin analogie

Un fenomen similar (oarecum) se intampla si in matematica valorilor intregi.

Fie (in)ecuatia: x >= 0 Evident ca are un cel mai mic x ce-o satisface.

Sa adaugam acum inca o restrictie: x mod 2 = 1

Obtin sistemul: x mod 2= 1 x >= 0

Evident ca are acum o alta 'cea mai mica solutie'.

Asa ceva se intampla si cu tipurile in Haskell, cand folosim ecuatii recursive, fara indicatii exprese de tip.


Pagina indexata la indexul Categories:Ro


<= Inapoi la pagina principala Ro/Haskell.

<- Inapoi la Intrebarile incepatorului Ro/Haskell.