runST с системой типов Хиндли-Милнера
Если я правильно понимаю монаду ST в Haskell,runST
использует типы ранга 2 умным способом, чтобы гарантировать, что вычисление не ссылается ни на какой другой поток при выходе из монады.
У меня есть игрушечный язык с системой типов Хиндли-Милнера, и мой вопрос заключается в следующем: возможно ли расширить систему типов HM специальным правилом для набора текста?runST
приложения, так что монаду ST безопасно избежать,без введения типов ранга 2?
Точнее,runST
будет иметь типforall s a. ST s a -> a
(т. е. rank-1) и правило типизации сначала попытается обобщить тип вычисления таким же образом, как HM обобщает типы в выражениях let, но выдает ошибку типа, еслиs
Переменная типа найдена связанной.
Вышесказанное ограничивает только принятые программы по сравнению с vanilla HM, так что это звучит нормально, но я не уверен. Будет ли это работать?