runST con sistema de tipo Hindley-Milner

Si entiendo la mónada ST en Haskell correctamente,runST usa los tipos de rango 2 de una manera inteligente para garantizar que un cálculo no haga referencia a ningún otro hilo al escapar de la mónada.

Tengo un lenguaje de juguete con un sistema de tipo Hindley-Milner, y mi pregunta es la siguiente: ¿es posible extender el sistema de tipo HM con una regla ad-hoc para escribir?runST aplicaciones para que la mónada ST se pueda escapar con seguridad,sin introducir tipos de rango 2?

Más precisamente,runST tendría tipoforall s a. ST s a -> a (es decir, rango 1) y la regla de mecanografía primero trataría de generalizar el tipo de cálculo de la misma manera que HM generaliza los tipos en expresiones let, pero genera un error de tipo si els La variable de tipo se encuentra vinculada.

Lo anterior solo restringe los programas aceptados en comparación con vanilla HM, por lo que parece correcto, pero no estoy seguro. ¿Funcionaría esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta