"horsh"  wrote:

> I am very new to haskell.
> 
> Could anyone please explain why these two things are not equivalent:
> 
> m2 = do  a <- (drawInt 1 10)
>        print a
> drawInt :: Int -> Int -> IO Int
> drawInt x y = getStdRandom (randomR (x,y))
>       
> m1 = do b <- getStdRandom (randomR (1,10))
>       print b
> 
> the second one produces
> *** Binding             : m1
> *** Outstanding context : (Num b, Random b)

In Haskell, numeric literals are overloaded. "1" could be an Int,
Integer, Rational, Float etc. randomR can use any of Int, Integer,
Float or Double, but it needs to know which. Adding an explicit type
signature to one of the literals will eliminate the error, e.g.:

        m1 = do b <- getStdRandom (randomR (1,10 :: Int))
                print b

-- 
Glynn Clements <[EMAIL PROTECTED]>
_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to