generated at
Data.STRef
STモナド関連の便利関数などを提供する



STモナドの中で使用するmutableな参照を表す型
hs
data STRef s a = STRef (MutVar# s a)
これにはモナド型クラスは実装されていない


STモナド内で扱う参照を生成する
ST.hs
newSTRef :: a -> ST s (STRef s a) newSTRef init = ST $ \s1# -> case newMutVar# init s1# of (# s2#, var# #) -> (# s2#, STRef var# #)
s1# GHCのprimitive値になっているからパフォーマンス的に有利ということかmrsekut
変更可能な領域を作り出す
mallocでヒープを確保してるようなイメージ
s が2重に現れる理由 #??
STモナドの中でSTモナドを使ったときとに必要になるとか?
どの参照なのかを特定するために使うみたいな
ポインタみたいな


hs
modifySTRef :: STRef s a -> (a -> a) -> ST s ()
newSTRef で作った変数に再代入するための関数


hs
readSTRef :: STRef s a -> ST s a
再代入できる変数の値を読み出す