On Tue, Oct 17, 2006 at 01:21:38PM -0300, V?ctor A. Rodr?guez wrote:
> To: haskell-cafe@haskell.org
> From: "Víctor A. Rodríguez" <[EMAIL PROTECTED]>
> Date: Tue, 17 Oct 2006 13:21:38 -0300
> Subject: [Haskell-cafe] Newbie and working with IO Int and Int
> 
> Hi all,
> 
> I'm really newbie to Haskell, and working on a program I'm trying to make
> some testing.
> I make some test on certain know values ( e.g. adding 10 to 15 must return
> 25) and some test on random values (eg. adding rnd1 to rnd2 must return
> rnd1+rnd2).
> 
> The problem that makes me mad is the random number generation. I can obtain
> random numbers through module Random but all of them return IO Int values
> (all I need are Ints) instead of Int.
> I know that I can adjust my own functions to use IO Int instead of Int but
> the call to certain functions must contain Int parameters, because these
> ones can't be changed to accept IO Int (I read
> http://haskell.org/hawiki/ThatAnnoyingIoType and know that can convert from
> IO Int to Int :-P).
> 
> How can I deal with this problem ??

you should probably keep reading on.  (-: have you seen the stuff on
the new wiki?

 http://www.haskell.org/haskellwiki/Books_and_tutorials#Using_monads

short answer: the type IO Int describes computations that yield
integers, and in order to get to the Int you need to run the
computation.  if you have a pure function f and want to feed it with
random values, you need to do something like:

  randomIO >>= \ x -> randomIO >>= \ y -> return (f x y)

the complete expression has type IO Int again.  don't try to strip off
that IO; there are ways, but they don't teach you how to do it right.

hth,
m.

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to