Cum deosebeste Haskell un Intreg de un intreg lung ?

From HaskellWiki
Revision as of 22:53, 29 June 2021 by Atravers (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Haskell - Un limbaj functional pur
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:

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'.