Я следую "Real World Haskell", и я перехожу к главе 2, где упражнение - создать функцию "lastButOne", которая возвращает второе в последнее значение в списке. Мой исходный код:
lastButOne xs = if null (tail (tail xs))
then head xs
else lastButOne (tail xs)
Это работает отлично, если я не дам ему список только с 1 или 2 пунктами. Поэтому я изменил это на следующее:
lastButOne xs = if null xs || null (tail xs)
then head xs
else
if null (tail (tail xs))
then head xs
else lastButOne (tail xs)
Что проверяет, имеет ли он только 1 или 2 элемента, но затем выходит из строя, если у него только 1 элемент из-за вызова в голову. Моя проблема в том, что я не могу придумать ничего другого, кроме как "head xs", в идеале я хочу, чтобы он возвращал значение null или что-то в этом роде, но я не могу найти "нуль", который позволяет функции по-прежнему полиморфный.