Вы должны понимать синтаксис лучше.
В принципе, есть 2 суб-Синтаксисы:
- синтаксис для типов
- синтаксис выражений и шаблонов
В синтаксисе типа, [a]
означает list of elements of type a
В синтаксис выражения/шаблона, [a]
означает одноэлементный список, содержащий значение a
. Это эквивалентно (a:[])
(добавляется в пустой список).
Следовательно, ваша первая функция, например, проверяет, получает ли он одноэлементный список. Затем он берет голову хвоста хвоста однотонного списка, что не удастся.
Сообщение, которое вы получаете, состоит в том, что есть формы списков, которые вы не учитывали: а именно, пустой список и списки с более чем одним элементом.
И, конечно же, вы должны получать предупреждение за third2
, оно охватывает только списки с 3 или более элементами. Я уверен, что вы что-то пропускаете.
ghc 7.4.1 с '-Wall' жалуется на все три функции. Какой компилятор вы используете? –