MonadRandom

MonadRandm っていうライブラリがあったよー。

依存パッケージが増えるのをよしとするか否か…。ただ乱数系はやっぱり generator を状態として持つ必要があるので monadic に書いたほうがすっきりするのは確かですね。陽に generator を持ちまわさなくても Monad がよしなにしてくれるので。というか、だから元々 StdGen を状態に持つ StateT を走らせていたんでしょうけど。

ちなみにどうでもいいけど Monadic じゃなくて `mapAccum` でどうにかしようとした例：
```
  randomR (s, e) g =
    let (g', [x', y']) = mapAccumL ((swap .) . flip randomR) g $ [(x s, x e), (y s, y e)]
    in (Point x' y', g')

  random g =
    let (g', [x', y']) = mapAccumL ((swap .) . flip (const random)) g $ [1..2]
    in (Point x' y', g')
```
でも結局 `mapAccum` と `random` の I/F が合わなくて残念な結果に…。