
On Thu, Apr 05, 2012 at 10:42:20AM +0000, Amy de Buitléir wrote:
I'm trying to develop a very simple simulation framework. A simulation consists of a list of models. Models generate output events based on an input event. Here is what I have currently (it works fine).
modelT :: Model g modelT _ = do s <- get put $ s ++ " R" n <- HOW DO I GET A RANDOM NUMBER???? return [n]
I assume you are using the MonadRandom package? Getting a random number is as simple as doing something like "getRandomR ('A','Z')" (or using any other method from the MonadRandom class [1]). There is an instance MonadRandom m => MonadRandom (StateT s m), so calls to getRandom, getRandomR, etc. are automatically lifted into your Model monad. Your problem seems to be the type you have given to modelT: it claims that it will work for *any* type g but this is not so; g must represent a pseudorandom number generator. This works: modelT :: RandomGen g => Model g modelT _ = do s <- get put $ s ++ " R" n <- getRandomR ('A', 'Z') return [n] -Brent [1] http://hackage.haskell.org/packages/archive/MonadRandom/0.1.6/doc/html/Contr...