[Haskell-cafe] Convert IO Int to Int

Yusaku Hashimoto nonowarn at gmail.com
Tue Jun 9 07:20:51 EDT 2009


On 2009/06/09, at 19:33, Tobias Olausson wrote:

> You can not convert an IO Int to Int, or at least, you shouldn't.
> However, you can do as follows:
>
> test :: IO ()
> test = do
>    int <- randomRIO -- or whatever it is called
>    print $ useInt int
>
> useInt :: Int -> Int
> useInt x = x+10

Or, you can lift pure function into IO. the below test' function  
almost same as above test function. (But I used randomIO instead of  
randomRIO because it seemed to be a typo :-)

     test' = print =<< fmap useInt randomIO

I think it is more handy than using do notation, when you want to do  
something simple with monads. And converting IO Int to IO anything is  
much easier and safer than converting IO Int to Int.

     ghci> :m +System.Random Data.Char
     ghci> :t fmap (+1) randomIO
     fmap (+1) randomIO :: (Num a, Random a) => IO a
     ghci> :t fmap show randomIO
     fmap show randomIO :: IO String
     ghci> :t fmap chr randomIO
     fmap Data.Char.chr randomIO :: IO Char
     ghci> :t fmap (+) randomIO
     fmap (+) randomIO :: (Num a, Random a) => IO (a -> a)

Thanks,
Hashimoto


> //Tobias
>
> 2009/6/9 ptrash <ptrash at web.de>:
>>
>> Hi,
>>
>> I am using the System.Random method randomRIO. How can I convert  
>> its output
>> to an Int?
>>
>> Thanks...
>> --
>> View this message in context: http://www.nabble.com/Convert-IO-Int- 
>> to-Int-tp23940249p23940249.html
>> Sent from the Haskell - Haskell-Cafe mailing list archive at  
>> Nabble.com.
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
>
>
>
> -- 
> Tobias Olausson
> tobsan at gmail.com
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe



More information about the Haskell-Cafe mailing list