Добавить тип подписи:
lengthList :: [a] -> Int
Или что-то подобное. Ошибка гласит: «Вероятное исправление: используйте аннотацию типа, чтобы указать, каким должно быть t0». Другими словами, компилятор не может определить тип. Или, как говорится в комментарии: используйте функцию в контексте, тогда компилятор будет использовать контекст, чтобы вывести правильный тип для lengthList
. Я считаю, что функция foldr
использует ограничение класса Foldable t
; в вашем случае компилятор не знает, что сворачивает lengthList
. Ставя подпись выше, вы обязываетесь t0
быть списком. Посмотрите на вывод, который GHCi дает для
:t foldr
foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b
Короче говоря, GHC может выяснить, что a
не используется и b
является Num
, но он не знает t
.