# Haskell 23 ### Exercice 1 1. L'expression crée le type `Verité` qui n'a que deux constructeurs d'arité 0. 2. L'expression suivante crée un type `Arbre` défini inductivement comme étant soit une feuille, soit un nœud composé d'un flottant et de deux sous-arbres. 3. L'expression donnée crée une instance du type arbre construite par le constructeur `Noeud` avec comme valeurs le flottant 5, une instance du type arbre consturite par le constructeur `Noeud` avec comme valeur le flottant 2 et deux fois l'arbre contstruit par le constructeur `Feuille`, ainsi que une instance du type arbre construite par le constructeur `Noeud` avec comme valeur le flottant 7 et deux fois l'arbre construit par le constructeur `Feuille`. 4. On peut définir le type `data Arbre t = Noeud t (Arbre t) (Arbre t)` 5. ``` arbreSomme :: Num t => Arbre t -> t arbreSomme Feuille = 0 arbreSomme (Noeud v a b) = v + (arbreSomme a) + (arbreSomme b) ``` 6. Le type sur les arbres polymorphiques est donné ci-dessus. Pour les arbres Float, on aurait pour type `Arbre t -> t` 7. Ce type correspond à une valeur de type `t` qui peut ne pas avoir été renvoyée. C'est un espèce de `null` du langagae fonctionnel. Il est ou bien présent (`Just a`) ou absent (`Nothing`). 8. `head` sur une liste vide renvoie une exception. 9. ``` headSafe :: [t] -> Maybe t headSafe [] = Nothing headSafe (e:s) = Just e ``` 10. `data Arbre t = Noeud t (Maybe (Arbre t)) (Maybe (Arbre t))`