Я понимаю, как forall
позволяет нам писать полиморфную функцию.
В соответствии с этой главой нормальная функция, которую мы обычно пишем, это типы 1-го уровня. И эта функция имеет тип 2-го уровня:
foo :: (forall a. a -> a) -> (Char,Bool)
foo f = (f 'c', f True)
Это объясняется следующим образом:
В общем случае тип rank-n является функцией, которая имеет хотя бы одну rank-(n-1), но нет аргументов еще более высокого ранга.
Что это значит для аргументов ранга?
Может ли кто-нибудь привести пример типа 3-го уровня, который аналогичен предыдущей функции foo
.