Есть ли у монархов 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 может представлять интерес. Я не читал достаточно внимательно, чтобы сказать, действительно ли то, что они там описывали, требует поддержки компилятора, но похоже, что реализация некоторых из примитивов в компиляторе была наименьшим сопротивлением.