import Data.STRef; import Control.Monad.ST main :: ST s () main = do x <- newSTRef 7 writeSTRef x 8 a <- readSTRef x return aLesen 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