В Haskell имена типов начинаются с заглавных букв, а переменные типов начинаются со строчных букв. Так что если вы напишите integer
, это переменная типа. Таким образом, ваш тип такой же, как и [a] -> Bool
, то есть вы берете список чего угодно и возвращаете Bool. Таким образом, поскольку нет ограничений на то, какой тип элемента может быть в списке, вы не можете использовать <=
для него.
Чтобы исправить это, вы можете либо просто изменить его на Integer
, чего вы хотели, либо добавить ограничение Ord, например: Ord a => [a] -> Bool
. Последнее заставит вашу функцию работать с любым типом, который реализует класс типов Ord
(который предоставляет операторы сравнения, такие как <=
).