Types
Haskell est un langage fonctionnel fortement typé. À la compilation, il vérifie pour chaque fonction si le type déclaré correspond au type du corps de la fonction. À l'exécution, il réduit les expressions pour obtenir leur valeur.
| Type | Notation | Valeur | Opérations et remarques |
|---|---|---|---|
| entiers | Int, Integer |
1, -3 |
+, -, *, -, mod, div |
| réels | Float, Double |
5.2, 3.5E-2 |
+, -, *, -, /, cos, atan |
| booléens | Bool |
True, False |
not, ||, && |
| caractères | Char |
'a', ';', '\' |
|
| chaînes | String |
"Haskell" |
Synonyme de [Char] |
| tuples | (a, b), (a, b, c) |
(3,True), ([1,8],'h') |
|
| listes | [a] |
|
Constructeurs :
Listes de mêmes types uniquement |
| fonctions | a -> b |
|
Application :
Composition : |
Fonctions
En Haskell, la déclaration et la définition de fonctions suit cette syntaxe :
nom :: type nom arguments = expression
Vous notez qu'une fonction est une expression, qui a donc un type et une valeur.
Exemples
double :: Integer -> Integer double x = 2 * x division :: Integer -> Integer -> Double division dividende diviseur = dividende / diviseur trois :: Integer trois = 3
Le troisième exemple montre qu'une constante n'est qu'une fonction sans argument.
Opérateurs
Voici la liste des opérateurs les plus utilisés en Haskell, avec leur précédence et leur associativité :
| Précédence | Opérateur | Associativité |
|---|---|---|
| 9 | !! |
à gauche : x!!y!!z équivaut à
(x!!y)!!z |
| 9 | . |
à droite : f.g.h équivaut à
f.(g.h) |
| 8 | ^, ^^, ** |
à droite |
| 7 | *, /, `div`, `mod` |
à gauche |
| 6 | +, - |
à gauche |
| 5 | :, ++ |
à droite |
| 4 | ==, /=, <, >, >=,
<=, `elem` |
|
| 3 | && |
à droite |
| 2 | || |
à droite |
| 0 | $ |
à droite |
- Transformation d'un opérateur infixe en fonction :
(+),(==) - Transformation d'une fonction en opérateur infixe :
`mod` - Application partielle d'une fonction :
(1+),(div 1000),(`mod` 2)
Expressions conditionnelles
| Expression | Syntaxe | Remarques |
|---|---|---|
| Expression conditionnelle | if C then E1 else E2 |
E1 et E2 sont des expressions
de même type |
| Définition locale |
f = E1
where x1 = E2
x2 = E3
|
Note : |
INGInious