Подтвердить что ты не робот

Поддерживает ли ST monad специальную поддержку компилятора?

Есть ли у монархов ST специальная поддержка компилятора в GHC?

4b9b3361

Ответ 1

Здесь вы можете увидеть код для STRefs: http://haskell.org/ghc/docs/latest/html/libraries/base/src/GHC-STRef.html

Он использует, очевидно, примитивы MutVar#. Код runST аналогичным образом использует примитивные и распакованные кортежи RealWorld#. Однако, учитывая просто IORefs и unsafePerformIO, вы могли бы создать свою собственную монаду ST с теми же свойствами большого О, хотя, возможно, и с меньшей эффективностью.

Ответ 2

Раздел 9 Состояние в Haskell может представлять интерес. Я не читал достаточно внимательно, чтобы сказать, действительно ли то, что они там описывали, требует поддержки компилятора, но похоже, что реализация некоторых из примитивов в компиляторе была наименьшим сопротивлением.