hsdata STRef s a = STRef (MutVar# s a)
ST.hsnewSTRef :: a -> ST s (STRef s a)
newSTRef init = ST $ \s1# ->
case newMutVar# init s1# of
(# s2#, var# #) -> (# s2#, STRef var# #)
s
が2重に現れる理由 #??hsmodifySTRef :: STRef s a -> (a -> a) -> ST s ()
newSTRef
で作った変数に再代入するための関数hsreadSTRef :: STRef s a -> ST s a