hankgong: > > Hello,all > > My intention is to generate 50 random coordinates like (x,y). > > myrand :: Int > myrand = randomRIO(1::Int, 100) > > rf=[(myrand, myrand) | a <- [1..50]] > > My short program is like this. However, GHCI say that the return type of > randomRIO is IO a while the function defined by me is Int. Since I only need > a integral type as my cooridinate, could you tell me how to fix this? >
Try initialising your random generator in 'main' , creating a list of infinite randoms, take the number you need, then feed that to the functions that need the list: import System.Random import Text.Printf import Data.Word main = do g <- newStdGen -- intialise a random generator let (a,b) = split g -- create two separate generators as = randoms a -- one infinite list of randoms bs = randoms b -- another rs = zip as bs -- an infite list of pairs dump (take 50 rs) -- take 50, and consume them dump :: [(Int,Int)] -> IO () dump s = mapM_ (uncurry (printf "(%d,%d)\n")) s And running this: $ runhaskell A.hs (639240856,75173658) (-979753698,2004752008) (1514872498,-686799980) (1122012756,-645055058) ... -- Don _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe