Вывод типа GHC для типов более высокого ранга -присвоение монотипам

Ранее я задавал этот вопрос , и после долгих исследований я пришел к выводу, что существуют специальные правила GHC, применяемые только для инфиксов $и ..

Что касается этого вопроса, я предполагаю, что GHC следует системе, упомянутой на странице RankNTypes -Haskell Prime , более подробно разработанной в произвольном -ранге .

На странице RankNTypes -Haskell Prime указано следующее:

parameter variables without explicit signatures are assigned monotypes in upwards inference, but may inherit arbitrary-rank types in downwards checking.

Я предполагаю, что «назначенные монотипы» означают, что типы ранга -N преобразуются в типы ранга -1 путем перемещения всех их квалификаторов на самый внешний уровень.

Я также считаю, что именно это вызвало необычную ошибку типа, из-за которой я задал свой предыдущий вопрос.

Итак, у меня есть несколько вопросов:

1 )Можно ли как-то заставить GHC выдавать предупреждение (или ошибку )при неявном преобразовании в монотипы? Ошибка типа в моем предыдущем вопросе потребовала времени, чтобы разобраться, предупреждение о преобразовании в монотип было бы полезнее, чем ошибка типа.
2 )Существуют ли случаи, когда неявное «присвоение монотипов» является разумным поведением, и если да, не могли бы вы привести пример?
3 )Что касается инфиксов $и ., для них в GHC действуют особые правила. Где это задокументировано? И есть ли другие специальные правила, которые есть у GHC, и где они задокументированы?

12
задан Community 23 May 2017 в 10:34
поделиться