前回は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) --
![第21回 更新操作を一般化するためのSTモナド](https://cdn-ak-scissors.b.st-hatena.com/image/square/bed39b5962a5d552c95b6d796db8f55e72d32943/height=288;version=1;width=512/https%3A%2F%2Fxtech.nikkei.com%2Fimages%2Fn%2Fxtech%2F2020%2Fogp_nikkeixtech_hexagon.jpg%3F20220512)