Haskellの実験メモです。
IORefからStateに話を繋げられないかと考えています。
IORefとStateで変数を書き換える動作を模倣してみました。
import Data.IORef
import Control.Monad.State
test1 n = do
a <- newIORef n
if n == 1
then writeIORef a $ n + 10
else writeIORef a $ n + 1
modifyIORef a (+ 5)
readIORef a
test2 = execState $ do
n <- get
if n == 1
then put $ n + 10
else put $ n + 1
modify (+ 5)
main = do
print =<< test1 1
print $ test2 1
実行結果
16
16
Stateは処理後に外せるのが便利だと思いました。
※ unsafePerformIO
はナシです。