[Haskell-cafe] Random question

Lev Walkin vlm at lionet.info
Wed Sep 24 17:10:57 EDT 2008


forgot return, of course:

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


Lev Walkin wrote:
> 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.
> 



More information about the Haskell-Cafe mailing list