[Haskell-cafe] Random question

Lev Walkin vlm at lionet.info
Wed Sep 24 17:07:52 EDT 2008


Iain Barnett wrote:
> Hi,
> 
> I have a function, that produces a random number between two given numbers
> 
> rand :: Int -> Int -> IO Int
> rand low high = getStdRandom (randomR (low,high))
> 
> 
> (Naively) I'd like to write something like
> 
> take (rand 1 10 ) [1..10]
> 
> and see [1,2,3,4] ... or anything but nasty type-error messages.

myTake :: IO [Int]
myTake = do
	n <- rand 1 10
	take n [1..10]

or

myTake = rand 1 10 >>= \n -> take n [1..10]

or

myTake = rand 1 10 >>= flip take [1..10]

> I'm reading about 6 tutorials on monads simultaneously but still can't 
> crack this simple task, and won't pain you with all the permutations of 
> code I've already tried. It's a lot, and it ain't pretty.
> 
> Would anyone be able to break away from C/C++ vs Haskell to help? Just a 
> point in the right direction or a good doc to read, anything that helps 
> will be much appreciated.


Monad enlightenment happens after 7'th monad tutorial. Verified by me
and a few of my friends.

-- 
vlm


More information about the Haskell-Cafe mailing list