[a]
- это одноэлементный список - список, содержащий только один элемент, a
.
Как таковой map f [a] == [f a]
и ваше определение эквивалентно
mult :: [Int] -> [Int]
mult [a] = [fun a]
[a]
эквивалентно (a : [])
и как выражение (то, что появляется справа от =
), или как образец (слева от =
).
(a : [])
- это модель, которая выражает это tail (a : []) == []
. Таким образом, любой список с ненулевым хвостом не будет соответствовать этому шаблону. Любой пустой список также не будет ему соответствовать.
Это случаи, когда ваш код не обрабатывает. Отсюда и ошибка «неисчерпывающей обработки шаблонов».
Исчерпывающая пара шаблонов сопоставления списков: []
и (a : as)
. Один для пустых списков, а другой для непустых списков с элементом head a
и tail as
.