(x:xs)
не соответствует []
, но так как оно будет соответствовать '1':[]
(несохраненная версия [1]
), вы получите ошибку соответствия шаблона, когда обрабатываете каждый элемент только потому, что не сделали Скажите программе, что делать в конце (а именно, чтобы остановиться). Нет абсолютно никаких причин, чтобы это произошло, просто добавьте базовый вариант для пустого списка:
asd [] = []
Кстати, это всего лишь ручная версия map
. Это может быть записано как
asd xs = map (\x -> if x == '+' then (x, TokenPlus) else (x, TokenInt 1)) xs