[Haskell-cafe] Outstanding context : (Num b, Random b)

Glynn Clements glynn.clements at virgin.net
Thu Feb 26 20:22:29 EST 2004


"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 <glynn.clements at virgin.net>


More information about the Haskell-Cafe mailing list