Я предположил, что вы записали неправильные типы.
Удаление аннотаций типов несколько помогает, что приводит к менее запутанным ошибкам:
A.hs:7:76:
Occurs check: cannot construct the infinite type: a0 = [a0]
In the third argument of `replaceNth', namely `arg'
In the expression: replaceNth m (replaceNth n v (arg !! m)) arg
, поэтому
\m n v arg -> replaceNth m (replaceNth n v (arg !! m)) arg
уже имеет проблемы.
Типы ранга N и переменные типа с лексической областью
Используя forall
не в крайнем положении,вы наткнулись на ранг N типов .forall
на вашем внутреннем b
говорит о том, что оно должно быть непрозрачным, полиморфным и не связанным с другими типами использования b
.Скорее всего, это не то, что вы намеревались сделать.
Это тонко отличается от переменных типа с лексической областью , которые также могут быть введены путем ввода в крайнюю позицию , как описано здесь .
Удалив (я думаю) ошибочные forall
s в не внешней позиции, вы получите гораздо более простые ошибки типа.