projprog/HSK9.md

22 lines
1.7 KiB
Markdown

# Haskell 9
### Exercice 1
1. Le typage statique permet d'éviter certaines erreurs de programmation en les capturant dès la compilation (comme ajouter un entier et une chaine de caractères par exemple).
2. Y a des choses non typées en Haskell ? À la limite les commandes de l'interpréteur.
3. `:t 'a'` affiche le type de l'objet `'a'`, c'est à dire `Char`.
4. L'opérateur `::` signifie ici *est du type*
5. `Int` est un entier machine, de 32 ou 64 bits typiquement. `Integer` est un entier mathématique *théoriquement* non borné.
6. Cette différence permet de coder des algorithmes «machine» comme les codages binaires, les opérations bit à bit, et les entiers `Integer` permettent de coder sans se soucier de dépassement de la capacité de l'entier, qui peut amener des bugs plutôt étranges. De telles considérations peuvent simplifier les preuves d'algorithme.
7. Haskell prévoit les types `Double` et `Float` pour représenter les réels, respectivement sur 64 et 32 bits.
8. Les booléens sont appelés `Bool`.
9. Les caractères sont appelés `Char`.
### Exercice 2
1. Un type explicite est un type donné ... explictiement à une variable, sans le déduire du contexte.
2. `True` est du type `Bool` (c'est un booléen).
3. `"string` est du type `[Char]` (une liste de caractères)
4. `('e', False)` est du type `(Char, Bool)` (un 2-uplet avec un caractère en premier élément et un booléen en second élément).
5. Les types de ces trois variables sont différents. Certes ils sont tous des tuples, mais *tuple* est une classe de types. Le premier est un tuple `(Char, Bool)`, le second un tuple `([Char], Bool)` et le dernier un tuple `(Char, Bool, [Char])`.