Crypt Master,

  CM> I have tried I swear, even googled for 45 minutes, but I
  CM> cant seem to get random numbers working.
  CM> 
  CM> In the documentation is has:
  CM> 
  CM> rollDice :: IO Int
  CM> rollDice = getStdRandom (randomR (1,6))
  CM> 
  CM> But if I type "getStdRandom (randomR (1,6))" into hugs
  CM> in the context of module which imports Random, I get get
  CM> errors.
  CM> 
  CM> ERROR - Unresolved overloading
  CM> *** Type       : (Random a, Num a) => IO a
  CM> *** Expression : getStdRandom (randomR (1,6))

Use

  (getStdRandom (randomR (1,6))) :: IO Int 

instead.

\begin{code}
module Main where
import Random


main :: IO ()
main =  do n <- (getStdRandom (randomR (1,6))) :: IO Int
         ; print n
\end{code}

Explanation. The compiler/interpreter knows your expressing is producing a
value of type IO a. It also knows a is an instance of Num. But it just does
not have enough information to resolve the exact type a. So, you have to
help the compiler/interpreter a little and provide the information it needs
through explicit type signatures or annotations.

HTH,

Stefan


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

Reply via email to