[Haskell-cafe] random-fu confusion
James Andrew Cook
mokus at deepbondi.net
Tue Sep 7 08:14:40 EDT 2010
A PureMT generator is immutable, so must be threaded through the monad in which you are sampling. There are RandomSource instances provided for a few special cases, including "IORef PureMT" in the IO monad. For example:
main = do
mt <- newPureMT
src <- newIORef mt
flips <- runRVar (replicateM 20 flipCoin) src
Alternatively, the functions in the module you mentioned can be used to define additional instances, such as:
instance MonadRandom (State PureMT) where
supportedPrims _ _ = True
getSupportedRandomPrim = getRandomPrimFromPureMTState
And RandomSource instances look almost the same. See the Data.Random.Source.PureMT source for examples. (I thought I had included this particular instance in the distribution but I apparently missed it. The next release will probably include this as well as corresponding instances for the 'transformers' package, possibly separated out into 'random-fu-mtl' and 'random-fu-transformers' packages).
The "StdRandom" type is a convenient "RandomSource" designating this instance in the State PureMT monad. Personally, I prefer to use the "sample" function for this purpose, as well as the "sampleFrom" function in place of runRVar/runRVarT. GHCi does not display the "sample" functions' types properly - they are defined for RVarT as well as for all Distribution instances.
Sorry it took so long responding.
On Sep 2, 2010, at 10:01 AM, Alex Rozenshteyn wrote:
> I seem to be having confusion at the runRVar level of random-fu.
> I can't figure out how to use the Data.Random.Source.PureMT module to get a meaningful random source (I can't get my code to type-check).
> I wrote a [trivial] flipCoin function
> > flipCoin = uniform False True
> and am trying to fill in the final place of runRVar
> > :t runRVar (replicateM 20 flipCoin)
> runRVar (replicateM 20 flipCoin)
> :: (RandomSource m s) => s -> m [Bool]
> Alex R
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
More information about the Haskell-Cafe