Personal tools

Cum deosebeste Haskell un Intreg de un intreg lung ?

From HaskellWiki

Revision as of 10:46, 12 July 2011 by Ha$kell (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
Haskell - Un limbaj functional pur

Vechile limbaje obligau programatorul sa scrie 1.0 pentru un real si 1 pentru un intreg.

Haskell foloseste un mecanism revolutionar, care face ca acelasi 1 , sa zicem, sa functioneze automat si ca intreg scurt din Int si ca intreg lung din Integer si ca real, (ba chiar si ca valoare monadica!) sau alta valoare a unui tip din clasa Num - chiar si un tip definit de utilizator - dupa nevoie.

Nevoia e stabilita de sistemul de tipuri din Haskell care tipizeaza expresia in care apare numarul si decide ce tip este necesar acolo.

Daca nu poate decide, recurge in ultima instanta la o declaratie default.

Bineinteles, daca utilizatorul vrea ca in tipul ComenziPostale 1 sa insemne Cantitatea "o bucata", va trebui sa:

- introduca tipul ComenziPostale in clasa Num

- sa defineasca functii

fromInteger :: a -> ComenziPostale

Astfel, eventualele numere scrise in expresii in care e vorba de comenzi postale sunt transformate automat in numere, deoarece Haskell plaseaza automat un apel fromInteger in jurul fiecarui intreg , 1 devenind fromInteger(1).


Sistemul de tipuri face restul, alege functia care sa transforme acel 1 in ceea ce trebuie. Si gata. 1 a devenit ceea ce era necesar in acea expresie.


<= Inapoi la pagina principala Ro/Haskell.

<- Inapoi la inceputul paginii 'Intrebarile incepatorului Ro/Haskell'.