[Haskell-cafe] Different forms for RandomT?
Zemyla
zemyla at gmail.com
Thu Jul 30 17:38:52 UTC 2015
Normally, a monad transformer to provide a random number generator would be
of the form StateT g, where g is a RandomGen. But I've seen some libraries
(like QuickCheck) define their RandomT as:
newtype RandomT g m a = RandomT { runRandomT :: g -> m a }
with their monadic bind operation defined as
(RandomT m) >>= f = RandomT $ \g -> let (ga, gb) = split g in m ga >>= (\a
-> runRandomT (f a) gb)
and return and fail as in ReaderT.
Can someone describe the advantages and disadvantages of doing RandomT this
way? I mean, if your generator has a subpar split operation (and most do),
this will obviously exacerbate any problems with it. Does it give any
comparable advantages?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20150730/2de086ff/attachment.html>
More information about the Haskell-Cafe
mailing list