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 等
}