I find it useful to have a seed argument to nearly all random functions rather than using ones with an IO signature. This way you can speed up your program quite a bit and also make testing much easier. I think that MonadRandom does this automatically too.