sistem static de verificare a tipurilor - adica oricarei expresii I se asociaza un tip
Acest lucru reduce, în cazul Hakell-ului, în mod drastic numărul bug-urilor care ar putea apărea.
sistem infererenţial de tipuri, adică nu este nevoie să specificăm de fiecare dată tipul unei expresii ( tipul variabilei se subînţelege din context ).
aflarea tipului unei expresii
Prelude> :t ’c’
’c’ :: Char
Tipuri in Haskell Tipuri simple
Numere întregi: Int şi Integer:
Int conţine numerele întregi dintre -2^31 şi 2^31-1
Integer este, în esenţă, acelaşi ca şi tipul Int, exceptând faptul că, în acest tip, se poate reprezenta orice număr întreg
De utilizat numai în cazurile în care ştim sigur că se depăşeşte intervalul lui Int
Tipuri in Haskell Tipuri simple
Numerele reale: tipurile Float şi Double:
Float conţine numerele reale in simpla precizie
notaţie zecimală: 265.65
notaţie stiinţifică: 2.6565e2
nu încercaţi să verificaţi faptul că
Double este, în esenţă, acelaşi ca şi tipul Float, exceptând faptul că el reprezintă numerele cu o mai bună precizie.
Tipuri in Haskell Tipuri simple
Tipul boolean: Bool
Tipul Bool conţine numai două valori True şi False
este utilizat pentru reprezentarea rezultatelor unor decizii.
să notăm faptul că şi True şi False se scriu cu literă mare.
Tipuri in Haskell Tipuri simple
Tipul Char
Tipul Char conţine caracterele, şi anume:
caracterele alfabetice, 'a' .. 'z' şi 'A' .. 'Z'
caracterele numerice, '0' .. '9' caracterele simbolice, cum ar fi '!', '(', ' ', '+'
caracterele speciale,cum ar fi '\n' (linie nouă), '\t' ( tab)
Ghilimelele între care se află un caracter sunt cele simple (apostrof) care se găsesc pe tastatură pe aceeaşi tastă cu cele duble, “.
Tipuri in Haskell Tipuri simple
Tipul String
Tipul String conţine valori constituite dintr-un şir de caractere din Char.
Daca un anumit tip α aparţine unei anumite clase de tipuri (adică toate funcţiile asociate acelei clase conţin implementări pentru α) vom spune că α este o instanţă a acelei clase
Int este instanta si a clasei Eq si a clasei Num
Tipuri in Haskell Clase de tipuri
Clasa Eq
este clasa de tipuri pentru care este permisa testarea egalitatii
Cu alte cuvinte, este clasa “dedicata” functiilor == si /=
(==) :: Eq a => a -> a -> Bool
(/=) :: Eq a => a -> a -> Bool
Tipuri in Haskell Clase de tipuri
Clasa Num.
are constante numerice ca şi funcţii.
când vom scrie 3, de exemplu, compilatorul este liber să aleagă tipul lui 3 (întreg sau cu virgulă mobilă, de exemplu).
Se defineşte clasa Num ca fiind clasa care conţine toate numerele şi principalele operaţii peste ele.
Tipurile numerice de bază sunt, aşadar, instanţe ale clasei Num.
Bineînţeles Int, Integer, Float, Double, sunt instanţe ale acestei clase
Tipuri in Haskell Clase de tipuri
Clasa Show
Tipurile din clasa Show au in comun o functie care converteste valori ale acelor tipuri într-o valoare de tip String.
Această funcţie este numită show .
show :: Show a => a -> String
De exemplu,
când aplicăm show numărului întreg 4 se obţine şirul “4”.
când se aplică unui caracter ‘a’ se obţine un şir de trei caractere “’a’” (semnele apostrof sunt şi ele privite ca şi caractere).
Tipuri in Haskell
Aveti in carte intre paginile 146-149 o descriere pe scurt si a altor clase
există şi o ierarhie a claselor în Haskell care este data in figura urmatoare (cea din carte este ceva mai veche)
Clasele Haskell
Ce urmeaza?
Am vazut, pana acum, ca nu am pomenit nimic despre interactivitate
Ati discutat in trecut despre modul de a concepe programe interactive in Haskell, dupa cum s-a descris pe scurt si modul de a impune o executie secventiala a unor instructiuni cu ajutorul cuvantului cheie
do
Ideea este ca orice orice program functional se bazeaza NU pe executia secventiala ci pe evaluare de expresii.
Din acest punct de vedere, limbajul Haskell, este lenes (lazy), in sensul ca evalueaza NUMAI atunci cand I se cere expres acest lucru.
Ce urmeaza?
Tot asa, scriind 3, de exemplu, Haskell o va considera ca functie de valoare constanta si o va evalua ca atare si maine si …
Sau daca in liniile de program apare sin, de exemplu, evaluarea va ramane la fel intr-un argument, indiferent de starea externa a calculatorului
Dar daca scriem un program care sa contina o “functie” today ()?
Daca o evalueaza astazi ofera 4 martie, daca rulez programul maine el ofera 5 martie samd, deci nu este functie.
Dar click-urile unui mouse? Ele sunt functii? Clar nu.
Dar imprimarea sau citirea unui fisier? Nu
Se poate realiza asa ceva in Haskell. Raspunsul provine din Teoria categoriilor, sub forma de
MONADA
Dar despre asta, si poate v-am facut curiosi , incepand cu data urmatoare.