Exercices Corriges en Haskell : Type et contraintes de classes des fonctions.
Considérez les définitions suivantes :
- appl (f , x) = f x
- pair x y = (x ,y )
- mult x y = x * y
- double = mult 2
- sym (x , y) = x == y
- palindrome xs = reverse xs == xs
- twice f x = f (f x)
- incrAll xs = map (+1) xs
- norme xs = sqrt ( sum ( map f xs )) where f x = x ^2
- greaters n xs = [ x | x <- xs, x > n ]
- menu xs = concat ( map f ( zip [1.. length xs ] xs )) where f (n ,x ) = "("++ show n ++") " ++ show x ++ "\ n"
1. Calculez les types de toutes ces fonctions.
2. Énumérez tous les opérateurs et/ou fonctions surchargées qui apparaissent dans ces définitions (à la droite de l’égalité simple), avec leur types et contraintes de classe. Parmi ces fonctions, quelles sont des méthodes de classe ?
3. Affinez le calcul des types en ajoutant les contraintes de classe au type d’une fonction, lorsque un méthode (ou une fonction soumise à des contraintes) apparaît dans le corps de la définition.
4. Quelles sont les fonctions de deux arguments ? Si une telle fonction n’est pas en forme currifiée, donnez une définition équivalente qui soit en forme currifiée.
5. Que fait la fonction map ? Quel est son type ?
6. Quelles sont les fonctions d’ordre supérieur ?
7. Quelles sont les fonctions polymorphes ?