haskell StateTの使い方を知りたい(乱数の最大値を保存するコードを書きたい)
HaskellのStateTの使い方を理解するため、
乱数の上限値を保存するコードを書こうとしているのですが、いまいち分りません。以下現在のコードです
import System.Random
import Control.Monad.State
getRandom :: Int -> IO Int
getRandom x = getStdRandom $ randomR (0,x)
getCurrent :: StateT Int IO Int
getCurrent = do
i <- get
x <- lift $ getRandom i
return x
updateMax :: x -> StateT Int IO ()
updateMax x = do
put x
main = do
a <- flip evalState 0 $ do
updateMax 1000
getCurrent
print a
どうなれば上限値を更新・保存するように出来るでしょうか?
命令型ならこんな感じのコードになると思います。
Max = 0;
func getRandom = RandRange(0,Max);
func main = {
Max=100;
print(getRandom()); // 出力 50 等
Max=1000;
print(getRandom()); // 出力 500 等
}