Cum deosebeste Haskell un Intreg de un intreg lung ?

From HaskellWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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.


Bibliografie:

Tn.jpg Paul Hudak, John Petterson, Joseph H.Fasel, "O mica introducere in Haskell 98" Cap 9, 10. Versiunea in limba romana este/va fi editata de MatrixRom.


<= Inapoi la pagina principala Ro/Haskell.

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