参照透過性
Haskellでは上述のような問題点を解決するための試みがなされ、新しい仕様であるHaskell 2010でSTモナドとして結実した。参照透過性を満たす関数は引数が同じなら同じ値を返すものであるから、代入を使ってもその性質を満たし、なおかつ他の計算にも影響しなければよいとするものである。わかりやすい例として再帰関数がある。合計や階乗などは代入を使った反復であっても、与えられた引数が同じなら結果も同じである。代入をその関数の内部だけにとどめ、結果の取得は変数の内容をコピーして返す関数を使わせることで、確実に副作用から切り離すといった工夫を盛り込んだ。これがSTモナド(State Transformerモナド)である。