Ранее я задавал этот вопрос , и после долгих исследований я пришел к выводу, что существуют специальные правила 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, и где они задокументированы?