masaedw/evolution-hs — pull request #4 by swtw7466 (2013-05-20 13:17:39+00:00)
Title: 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 が合わなくて残念な結果に…。