Retourner une valeur null dans Haskell sans constriction Polymorphisme

Que je suis "Real World Haskell", et vais dans le chapitre 2, où l'exercice est de créer un "lastButOne" fonction qui renvoie la seconde à la dernière valeur de la liste. Mon code d'origine était:

lastButOne xs =     if null (tail (tail xs))
                    then head xs
                    else lastButOne (tail xs)

Qui fonctionne très bien, sauf si je lui donne une liste avec seulement 1 ou 2 éléments. Alors je l'ai modifié:

lastButOne xs = if null xs || null (tail xs)
                then head xs
                else
                        if null (tail (tail xs))
                        then head xs
                        else lastButOne (tail xs)

Qui vérifie si il a seulement 1 ou 2 des articles, mais ne parvient pas si il a seulement 1 point à cause de l'appel à tête. Mon problème est que je ne peux pas penser à quelque chose d'autre pour le retour autre que la "tête " xs", dans l'idéal, je veux qu'il à retourner la valeur null ou quelque chose comme ça, mais je ne peux pas trouver un "null" qui permet à la fonction de encore être polymorphe.

OriginalL'auteur Peter | 2011-11-10