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?