Есть два способа написать список (и шаблон списка). Если вы используете оператор ::
, у вас может быть произвольный список в конце вашего шаблона. Если вы используете нотацию [ ... ]
, ваш шаблон будет соответствовать только списку указанной длины c.
Вы смешиваете эти два типа шаблонов, что не то, что вам нужно. (Конечно, вы можете смешивать их при сопоставлении с соответствующим типом.)
Ваш шаблон должен (скорее всего) выглядеть следующим образом: Poly ((x, y) :: xs)
. Обратите внимание на круглые скобки вокруг тела шаблона. Оператор ::
имеет более низкий приоритет, чем применение Poly
. Так что вам нужны скобки.