Поскольку переменные типа не могут содержать политипы, кажется, что с помощью типов Rank * мы не можем повторно использовать существующие функции из-за ограничения их монотипа.
Например, мы не можем использовать функцию (.), когда промежуточный тип является политипом. Мы вынуждены повторно внедрять (.) На месте. Это, конечно, тривиально для (.), Но проблема для более существенных тел кода.
Я также считаю, что создание ((f. g) x) не эквивалентно (f (g x)) серьезный удар по ссылочной прозрачности и ее преимуществам.
Мне кажется, что это проблема стоп-шоу, и похоже, что расширения Rank * Types почти непрактичны для широкого использования.
Я что-то упустил? Есть ли план, чтобы типы Rank * лучше взаимодействовали с остальной системой типов?
РЕДАКТИРОВАТЬ: Как вы можете использовать типы (runST.всегда)?