úÎx+      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 newGenIO (from  crypto-api),  ,  , and  runCRandom.   getRandPair = do  int < - getCRandom  bytes <- getBytes 100  return (int, bytes)  func =  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 V function has degraded (theoretically unbounded, probabilitically 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.1Control.Monad.Crypto.RandomCRandCRandTCRandomcrandomcrandomRcrandoms crandomRsMonadCryptoRandom getCRandom getCRandomRgetBytesgetBytesWithEntropydoReseed runCRandT evalCRandTrunCRand evalCRandunCRandTcrypto-api-0.2 Crypto.RandomCryptoRandomGenGenError crandomR_Numwrapbase2Logbs2i