ST monad在GHC中是否有特殊的编译器支持?
答案 0 :(得分:9)
您可以在此处查看STRefs的代码:http://haskell.org/ghc/docs/latest/html/libraries/base/src/GHC-STRef.html
它明确地使用MutVar#
原语。 runST
代码同样使用RealWorld#
原语和未装箱的元组。但是,只要简单地使用IORef和unsafePerformIO
,您就可以使用相同的大O属性构建自己的ST
monad,尽管整体效率可能较低。
答案 1 :(得分:1)
State in Haskell的第9节可能会引起关注。我没有仔细阅读,以确定他们所描述的内容是否实际上需要编译器支持,但确实听起来像编译器中的一些原语实现的是阻力最小的路径。