úÎìÎM      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLThomas.DuBuisson@gmail.combetaportableNone;<=>?K^tSimple users of generators can use CRand for quick and easy generation of randoms. See below for a simple use of M (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 5CRandT is the transformer suggested for MonadCRandom. CRandom a is much like the Random class from the  System.RandomZ module in the "random" package. The main difference is CRandom builds on "crypto-api"'s N!, so it allows explicit failure.crandomR (low,high) gs as typically instantiated will generate a value between [low, high] inclusively, swapping the pair if high < low.Provided instances for  crandom gI generates randoms between the bounds and between +/- 2^256 for Integer.The ™ function has degraded (theoretically unbounded, probabilistically decent) performance the closer your range size (high - low) is to 2^n (from the top).MonadCRandom mD represents a monad that can produce random values (or fail with a O!). It is suggested you use the ! transformer in your monad stack.@'Catches exceptions from the base monad.A&Throws exceptions into the base monad.+OPQRSTUNVWXYZ[\M      ]      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPNOQNORNOSNOTNOUNOVNOWNOXNOYNOZNO[NO\NO]NO^NO_`.monadcryptorandom-0.7.2-HsUqtVP2YBvKEbZGojgr0iControl.Monad.CryptoRandomCRandCRandTunCRandTCRandomRcrandomR crandomRsCRandomcrandomcrandomsContainsGenError toGenError fromGenError MonadCRandomR getCRandomR MonadCRandom getCRandomgetBytesgetBytesWithEntropydoReseed newGenCRand liftCRand liftCRandT runCRandT evalCRandTrunCRand evalCRand$fContainsGenErrorGenError$fMonadCRandomeRWST$fMonadCRandomeRWST0$fMonadCRandomeReaderT$fMonadCRandomeWriterT$fMonadCRandomeWriterT0$fMonadCRandomeStateT$fMonadCRandomeStateT0 $fCRandomBool$fCRandomRInt64$fCRandomInt64$fCRandomRInt32$fCRandomInt32$fCRandomRInt16$fCRandomInt16$fCRandomRInt8 $fCRandomInt8$fCRandomRWord64$fCRandomWord64$fCRandomRWord32$fCRandomWord32$fCRandomRWord16$fCRandomWord16$fCRandomRWord8$fCRandomWord8 $fCRandomRInt $fCRandomInt$fCRandomRInteger$fMonadCRandomReRWST$fMonadCRandomReRWST0$fMonadCRandomReReaderT$fMonadCRandomReWriterT$fMonadCRandomReWriterT0$fMonadCRandomReStateT$fMonadCRandomReStateT0$fMonadCRandomReCRandT$fMonadCRandomeCRandT$fMonadCatchCRandT$fMonadThrowCRandT$fMonadContCRandT$fMonadWriterwCRandT$fMonadReaderrCRandT$fMonadStatesCRandT$fMonadTransCRandT$fFunctorCRandT$fApplicativeCRandT $fMonadCRandT$fMonadIOCRandT$fMonadErrorCRandT$fMonadFixCRandT(crypto-api-0.13.3-FZ06ejxhWpqJ5T2ceT6d8s Crypto.RandomnewGenIOCryptoRandomGenGenError GenErrorOtherRequestedTooManyBytes RangeInvalid NeedReseedNotEnoughEntropyNeedsInfiniteSeednewGen genSeedLengthgenBytes reseedInfo reseedPeriodgenBytesWithEntropyreseed