Cum deosebeste Haskell un Intreg de un intreg lung ?
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'.