gpt4 book ai didi

haskell - 带有 Hindley-Milner 类型系统的 runST

转载 作者:行者123 更新时间:2023-12-02 05:27:57 25 4
gpt4 key购买 nike

如果我正确理解 Haskell 中的 ST monad,runST 以巧妙的方式使用 2 级类型,以确保计算在转义 monad 时不会引用任何其他线程。

我有一种带有 Hindley-Milner 类型系统的玩具语言,我的问题如下:是否可以使用用于键入 runST 应用程序的临时规则来扩展 HM 类型系统,以便ST monad 是可以安全逃脱的,无需引入 2 级类型?

更准确地说,runST 的类型为 forall s a。 ST s a -> a (即,rank-1)并且类型规则将首先尝试以与 HM 在 let 表达式中概括类型相同的方式概括计算类型,但如果 s 类型变量被发现被绑定(bind)。

与 vanilla HM 相比,上述内容仅限制接受的程序,所以看起来不错,但我不确定。这行得通吗?

最佳答案

万一问题的评论不完全清楚,您需要的判断是

{\Gamma \vdash e \colon \forall s.\, {\tt ST}\, s\, a ~~~~ s \not\in \text{free}(a)\over \Gamma \vdash {\tt runST}\, e \colon a} ~~\text{[runST]}

这当然与 Hindley-Milner 附带的其他常见打字判断结合起来。 。有趣的是,我们最终不需要为任何引入 ST 类型的东西制定特殊规则,因为这些都不需要等级 2 的类型签名:

newSTRef :: a -> ST s (STRef s a)
readSTRef :: STRef s a -> ST s a
writeSTRef :: STRef s a -> a -> ST s ()
...

关于haskell - 带有 Hindley-Milner 类型系统的 runST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39725024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com