РЕДАКТИРОВАТЬ: Антал указывает, что мои рассуждения были неверны. Вот соответствующая часть комментария, которая дает реальную аргументацию (я чувствую себя плохо, принимая этот дословно, но этот ответ был принят, поэтому я не могу удалить его):
Причина, по которой это не работает, состоит в том, что тип foldl1
равен (a -> a -> a) -> [a] -> a
, а тип (==)
равен Num a => a -> a -> Bool
. Поскольку Bool
не является Num
, тип (==)
не соответствует a -> a -> a
, и поэтому применение foldl1
отклонено. Если бы это было принято, вы бы столкнулись с ситуацией, когда вы пытались сделать True == 6
, но система типов никогда не давала вам такого большого успеха.
Оригинальный ответ (последнее рассуждение неверно):
==
займет два Int
с и вернет Bool
. После первой итерации ваш список примеров становится [True, 6]
. Затем он пытается сравнить True
с 6
, что не удалось.