前回はSTモナドの基本的な特徴やSTモナドとかかわりのある拡張機能について説明しました。今回はそれらの知識を基にして,「STモナドのインタフェースとして提供されている関数」と「STモナドのさらなる性質」を説明します。 runST関数の働き 前回の拡張機能に対する説明で,runST関数を考察のための材料が揃いました。こうした知識を基に,runST関数について考えましょう。 まずはそれぞれの型について確認します。 STモナドは型ST sに対して定義されています。 Prelude Control.Monad.ST> :i ST newtype ST s a = GHC.ST.ST (GHC.ST.STRep s a) -- Defined in GHC.ST instance Monad (ST s) -- Defined in GHC.ST instance Functor (ST s) --
