{-# LANGUAGE MultiParamTypeClasses, UndecidableInstances #-} {- | Copyright : 2006-2007 Cale Gibbard, Russell O'Connor, Dan Doel, Remi Turk, Eric Kidd. License : OtherLicense Stability : experimental Portability : non-portable (multi-parameter type classes, undecidable instances) A type class for random number generation monads. See for the original version of this code. Instances of this type class include 'Control.Monad.Random.Rand' and monads created using 'Control.Monad.Random.RandT'. -} module Control.Monad.Random.Class ( MonadRandom, getRandom, getRandomR, getRandoms, getRandomRs, ) where import System.Random -- | An interface to random number generation monads. class (Monad m) => MonadRandom m where -- | Return a randomly-selected value of type @a@. See -- 'System.Random.random' for details. getRandom :: (Random a) => m a -- | Return an infinite stream of random values of type @a@. See -- 'System.Random.randoms' for details. getRandoms :: (Random a) => m [a] -- | Return a randomly-selected value of type @a@ in the range -- /(lo,hi)/. See 'System.Random.randomR' for details. getRandomR :: (Random a) => (a,a) -> m a -- | Return an infinite stream of randomly-selected value of type @a@ -- in the range /(lo,hi)/. See 'System.Random.randomRs' for details. getRandomRs :: (Random a) => (a,a) -> m [a]