runST com sistema do tipo Hindley-Milner

9

Se eu entendi a Mônada ST em Haskell corretamente, runST usa os tipos rank-2 de uma maneira inteligente para garantir que uma computação não faça referência a nenhum outro segmento ao escapar da mônada.

Eu tenho uma linguagem de brinquedo com um sistema de tipo Hindley-Milner, e minha pergunta é a seguinte: é possível estender o sistema de tipos HM com uma regra ad-hoc para digitar runST aplicativos para que a monad ST seja escapável com segurança, sem introduzir os tipos rank-2?

Mais precisamente, runST teria o tipo forall s a. ST s a -> a (isto é, rank-1) e a regra de digitação tentaria generalizar o tipo de cálculo da mesma forma que HM generaliza os tipos em let-expressions, mas gera um erro de tipo se a variável s type estiver vinculada.

O acima apenas restringe os programas aceitos em comparação com o vanilla HM, por isso parece ser bom, mas não tenho certeza. Isso funcionaria?

    
por max 27.09.2016 в 14:43
fonte

1 resposta

2

Caso os comentários para a pergunta não estejam totalmente claros, o julgamento que você precisa é

Istoéclaro,emconjuntocomosoutrosjulgamentoshabituaisdedigitaçãoquevêmcom Hindley-Milner . Curiosamente, não acabamos precisando fazer regras especiais para qualquer coisa introduzindo um tipo ST , já que nenhum deles requer assinaturas de tipo de classificação 2:

newSTRef :: a -> ST s (STRef s a)
readSTRef :: STRef s a -> ST s a
writeSTRef :: STRef s a -> a -> ST s () 
...
    
por Alec 13.11.2016 / 08:22
fonte