Есть ли у монады специальная поддержка компилятора? - PullRequest
13 голосов
/ 17 ноября 2011

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

Ответы [ 2 ]

9 голосов
/ 17 ноября 2011

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

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

1 голос
/ 17 ноября 2011

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

...