import Data.STRef; import Control.Monad.ST
main :: ST s ()
main = do
x <- newSTRef 7
writeSTRef x 8
a <- readSTRef x
return a
Lesen und Schreiben sind ST-Aktionen (nicht IO!),
weil sie nur den Hauptspeicherinhalt ändern.
ausführen mit beschränkten Nebenwirkungen
runST :: ( forall s . ST s a ) -> a
vergleiche: es gibt kein runIO :: IO a -> a