3. Utilisez ghci pour avoir les type de getLine,de getCPUTime et de putStrLn.
4. Essayez de comprendre ce qui se passe, puis faites quelques essais. À noter
que “main” à toujours le type IO (). Cela signifie qu’il ne rend aucun
résultat dans haskell, mais que tout ce qui est calculé est envoyé dans
l’environnement (par exemple affiché sur la sortie standard).
5. Réécrire le même programme en utilisant des bindings =<< et des return
Exercice 2 (Suite du TD).
Essayez de compiler les exemples vus en TD (n’oubliez pas de changer les noms
pour éviter les conflits).
Exercice 3 (La monade des listes).
1. Écrivez une fonction
fixerVal :: Eq a=> (a->b) -> a-> b-> (a -> b)
qui prend trois arguments : une fonction (f::a->b), une abscisse x::a et
une ordonnée y:b et qui rend une fonction f’::a->b qui est la même que
fexcepté pour xoù elle vaut y.
2. En l’utilisant, écrivez une fonction :
toutesVal :: Eq a, Enum b, Bounded b=> (a->b) -> a-> [a -> b]
qui prend une fonction (f::a->b), une abscisse x::a et rend la liste des
fonctions obtenues faisant varier cette abscisse sur toutes ses valeurs pos-
sibles. 2
3. En utilisant le binding (=<<) :: (a->[b]) -> [a] -> b, écrivez la fonc-
tion :
toutesValListe :: Eq a, Enum b, Bounded b=> (a->b) -> [a] -> [a -> b]
qui énumère toutes les valeurs possibles en changeant les éléments de la
liste de a.
4. Écrivez la fonction
valVerite :: Pred -> [Int -> Bool]
qui liste toutes les valeurs de vérité que l’on peut appliquer à un prédicat.
5. Écrivez une version avec une do-construction.
2. Indice : utilisez un map :: (b−> a−> b)−>[b]−>[a−> b].
2