Есть ли у монархов ST специальная поддержка компилятора в GHC?
Поддерживает ли ST monad специальную поддержку компилятора?
Ответ 1
Здесь вы можете увидеть код для STRefs: http://haskell.org/ghc/docs/latest/html/libraries/base/src/GHC-STRef.html
Он использует, очевидно, примитивы MutVar#
. Код runST
аналогичным образом использует примитивные и распакованные кортежи RealWorld#
. Однако, учитывая просто IORefs и unsafePerformIO
, вы могли бы создать свою собственную монаду ST
с теми же свойствами большого О, хотя, возможно, и с меньшей эффективностью.
Ответ 2
Раздел 9 Состояние в Haskell может представлять интерес. Я не читал достаточно внимательно, чтобы сказать, действительно ли то, что они там описывали, требует поддержки компилятора, но похоже, что реализация некоторых из примитивов в компиляторе была наименьшим сопротивлением.