
Magnus Therning writes:
ptrash wrote:
...am not getting through it. I just want to generate a random number and then compare it with other numbers. Something like
r = randomRIO (1, 10) if (r > 5) then... else ...
You have to do it inside the IO monad, something like
myFunc = do r <- randomRIO (1, 10
This may continue forever... With nice references to monads, to Unsafe@#*!, etc. ... We may say, as many tutorials do : "this is not what you want!" (which I hate ; you are not my conscience, whoever you are...), or just give some code, not always readable... Perhaps I belong to a minority here, but I strongly believe that at THIS level, the first thing to do - unless I am dead wrong - is to explain to our friend ptrash (who could find a less gothic pseudo) that in a pure functional programming, the construction r = whatEver(par1,par2) being a function call, cannot give "just a random number", something which is not (intuitively) determined, and changes with every call, despite the constancy of the arguments. For most of us, acquainted with the stuff, it becomes trivial, but if somebody doesn't know that a classical pseudo-random generator modifies a "seed", and in such a way involves a "side effect", then sending him to the monadic heaven is dangerous. Please, tell him first about random streams, which he can handle without IO. Or, about ergodic functions (hashing contraptions which transform ANY parameter into something unrecognizable). When he says : "I know all that", THEN hurt him badly with monads. Jerzy Karczmarczuk