úÎÃ      portable betaThomas.DuBuisson@gmail.com-Simple users of generators can use CRand for , quick and easy generation of randoms. See  below for a simple use of  (from  crypto-api),  ,  , and  runCRandom. getRandPair = do  int < - getCRandom  bytes <- getBytes 100  return (int, bytes)   func = do  g < - newGenIO " case runCRand getRandPair g of  Right ((int,bytes), g') -> useRandomVals (int,bytes) " Left x -> handleGenError x ;CRandT is the transformer suggested for MonadCryptoRandom.  CRandom a is much like the Random class from the  System.Random module in the random package. * The main difference is CRandom builds on  crypto-api's , so it allows  explicit failure. crandomR (low,high) g9 as typically instantiated will generate a value between  [low, high]( inclusively, swapping the pair if high < low. Provided instances for  crandom g3 generates randoms between the bounds and between +/- 2^256  for Integer. The W function has degraded (theoretically unbounded, probabilistically decent) performance C the closer your range size (high - low) is to 2^n (from the top). MonadCryptoRandom m% represents a monad that can produce  random values (or fail with a ). It is suggestd  you use the " transformer in your monad stack.             monadcryptorandom-0.2Control.Monad.Crypto.RandomCRandCRandTCRandomcrandomcrandomRcrandoms crandomRsMonadCryptoRandom getCRandom getCRandomRgetBytesgetBytesWithEntropydoReseed runCRandT evalCRandTrunCRand evalCRandcrypto-api-0.3 Crypto.RandomnewGenIOunCRandTCryptoRandomGenGenError crandomR_Numwrapbase2Logbs2i