[Haskell-cafe] setting seed for random numbers

Daniel Fischer daniel.is.fischer at web.de
Sun Jan 3 13:29:52 EST 2010


Am Sonntag 03 Januar 2010 18:46:30 schrieb Larry E.:
> I want to set a random seed for a random number generator. I tried
> this:
> getSeed = do
>        time <- getClockTime
>        return (ctPicosec (toUTCTime time))
>
> seed  <-  getSeed
> randList minval maxval = randomRs (minval,maxval) (mkStdGen seed)
>
>
> But I get the error:     parse error on input `<-' which refers to
> "seed<-getSeed".
>
> Using "seed<-getSeed"  from the  ghci command line works. Why doesn't
> it work in a
> script?
The

    value <- action

syntax is only available in do-blocks.
At the ghci prompt, you are in an IO do-block, so it's available there. In a script 
(source file), you are not.

I suggest making the generator an argument of randList, getting the seed and from that the 
generator in main and pass the generator to the pure functions doing the work.

Also, it might be good to use the random monad, available from 
http://hackage.haskell.org/package/MonadRandom

>
> THe second problem is the seed is of type Integer but mkStdGen wants
> an Int. How can I get an Int from an Integer? I tried mod to get the
> seed to within range for an int but the result is still of type
> Integer how can I coerce Integer to Int when I know result will fit?

fromInteger

>
> Thanks

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20100103/9de40230/attachment.html


More information about the Haskell-Cafe mailing list