Hi!
      
      
      Take a look at MonadRandom [1]. It is basically what you want
        without getting generator explicitly.
      
      
      
      
      
        With regards,
        Nikita Kartashov
        
        
        
       
      
      
        
        
        I'm having a bad time using the State
          monad to generate random numbers without carrying around a lot
          of StdGens manually.
          I have this snippet in the IO monad:
          
             ... IO stuff ...
             gen <- getStdGen
             let (numPlayers, numMatches) = (evalState genRandVariables
          gen) :: (Integer, Integer)
             ... More IO stuff ...
          
             where maxRandPlayers = 10 :: Integer
                   minRandMatches = 10 :: Integer
                   maxRandMatches = 100 :: Integer
                   genRandVariables = (do
                         np <- randomR (1, maxRandPlayers) --minimum
          1 other player
                         nm <- randomR (minRandMatches,
          maxRandMatches)
                         return (np, nm)) :: State StdGen (Integer,
          Integer)
          
          
          I get this error message:
test/Jakway/Blackjack/Tests/IntegrationTests/MatchTests.hs:53:23:
             Couldn't match expected type ‘StateT
                                             StdGen
          Data.Functor.Identity.Identity Integer’
                         with actual type ‘g0 -> (Integer, g0)’
             Probable cause: ‘randomR’ is applied to too few arguments
             In a stmt of a 'do' block: np <- randomR (1,
          maxRandPlayers)
             In the expression:
                 (do { np <- randomR (1, maxRandPlayers);
                       nm <- randomR (minRandMatches,
          maxRandMatches);
                       return (np, nm) }) ::
                   State StdGen (Integer, Integer)
          
test/Jakway/Blackjack/Tests/IntegrationTests/MatchTests.hs:54:23:
             Couldn't match expected type ‘StateT
                                             StdGen
          Data.Functor.Identity.Identity Integer’
                         with actual type ‘g1 -> (Integer, g1)’
             Probable cause: ‘randomR’ is applied to too few arguments
             In a stmt of a 'do' block:
               nm <- randomR (minRandMatches, maxRandMatches)
             In the expression:
                 (do { np <- randomR (1, maxRandPlayers);
                       nm <- randomR (minRandMatches,
          maxRandMatches);
                       return (np, nm) }) ::
                   State StdGen (Integer, Integer)
          
          What's really baffling to me is I feel like this is how it
          *should* look--that the whole point of the state monad is to
          *not* have to explicitly pass the StdGen to randomR.  What am
          I doing wrong?
          _______________________________________________
          Beginners mailing list
          Beginners@haskell.org
          http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
        
       
      
      
      
      
      _______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners