Мы можем немедленно найти эту проблему, если применим -Wall
в GHC (который автоматически включает -Wincomplete-patterns
) или просто попробуем пример найденного счетчика вручную.
QuickCheck находит xs = []
в качестве контрпримера. Итак, давайте посмотрим на cuadrados'
:
cuadrados' []
В этот момент мы не можем продолжать, поскольку cuadrados'
связывается только с одним шаблоном: (x:xs)
. К сожалению, []
не может соответствовать этому шаблону, и в результате вы получите ошибку. Чтобы это исправить, просто добавьте другой шаблон:
cuadrados' [] = []
cuadrados' (x:xs) = …
или просто используйте
cuadrados' xs = cuadrados'' (pares xs)
, поскольку мы не используем первый элемент явно.
При этом pares
- это filter even
, а cuadrados
- это map (^2) . filter even
. Попробуйте использовать стандартную библиотеку и функции более высокого порядка.