2.2 KiB
2.2 KiB
Haskell 10
### Exercice 1
- OK
- Signifie «est du type»
- L'opérateur -> est un constructeur de types signifiant «type fonction de A vers B»
- Le type indiqué est donc «fonction de Int vers Int» ou «fonction prenant un entier et renvoyant un entier».
- OK
- La première est correcte car l'argument à une fonction de type
Int -> Intest bien unInt. Dans la seconde expression, Haskelle râle parce que l'on essaie d'appliquer une fonction de typeInt -> Intà un argument de typeFloat: il y a incompatibilité. - Cette fois ci, les deux expressions sont valides car Int est une «sous-classe» de Float, c'est à dire qu'un entier peut toujours être compris comme un flottant.
Exercice 2
lengthrenvoie la taille de la liste passée en paramètre.lenghtest polymorphique, ce qui signifie que son argument n'a pas de type précis, la seule contrainte étant que ce doit être une liste. Mais ça peut être uneInt list, uneFloat list, ou même uneFloat list list list list list.- La commande
:taffiche le type de l'expression fournie en paramètre. aest une lettre dénotant n'importe quel type, la fonction length a donc le typet a -> Intoùtreprésente un objet de classeFoldable(commelist).- Les types comme
asont appelés génériques. Un objet ayant un type générique est par exemple la liste vide[]qui est liste vide pour n'importe quel type de contenu. - L'opérateur
++est du type[a] -> [a] -> [a], c'est à dire qu'il prend en argument «deux listes» de même type et renvoie une liste du même type que les arguments. - Le type des éléments en entrée et en sortie doit être le même, contrainte imposée par l'utilsation d'une même lettre pour décrire les types.
- Le type est alors écrit
[a] -> [a] -> ... −> [a] -> [a]avec n+1 fois le terme[a]. - L'opérateur
!!permet d'accéder aux éléments d'une liste à partir de leur indice. La fonction a donc le type[a] -> Int -> [a]. - La fonction
headperment d'accéder à l'élément en tête de la liste. Cette fonction a donc le type[a] -> a.
Exercice 3
Voir fstfunc.hs
Exercice 4
Voir fstfunc.hs