Когда я объявляю этот новый тип:
newtype ListScott a =
ListScott {
unconsScott :: (a -> ListScott a -> r) -> r -> r
}
который будет определять гипотетический тип ранга-2 ListScott :: ((a -> ListScott a -> r) -> r -> r) -> ListScott a
, компилятор жалуется, что r
не входит в область видимости. Не очевидно ли из сигнатуры типа, что я хочу передать полиморфную функцию первого класса на ListScott
?
Зачем нужен явный квантификатор типа для r
для таких случаев?
Я не теоретик типа и, вероятно, что-то пропустил...