second :: [a] -> a
second (_:x:_) = x
Explications :
La fonction second prend en entrée une liste d'éléments de type quelconque (a) et retourne le deuxième élément de cette liste. On suppose que la liste en entrée contient au moins deux éléments.
Le principe de résolution de cet exercice consiste à utiliser la notation des motifs (pattern matching) de Haskell pour extraire le deuxième élément de la liste.
Dans la définition de la fonction second, on utilise le motif _ : x : _ pour décrire une liste qui commence par un élément non utilisé (noté _), suivi d'un deuxième élément x, suivi d'une liste finale non utilisée (notée _). Le premier élément non utilisé permet d'ignorer le premier élément de la liste, et le dernier élément non utilisé permet d'ignorer tous les autres éléments.
Ainsi, la fonction second extrait le deuxième élément de la liste en associant l'élément x au deuxième élément de la liste, et en ignorant tous les autres éléments.
Notez que la signature de la fonction second indique que l'argument est une liste d'éléments de type quelconque ([a]) et que le résultat est un élément de la même type que les éléments de la liste (a). Si l'on passe une liste qui contient moins de deux éléments, ou si la fonction est utilisée avec un type différent de celui attendu, une erreur de type sera générée par le compilateur Haskell.