packages feed

BitStringRandomMonad 0.1.0.0 → 0.1.1.1

raw patch · 2 files changed

+9/−7 lines, 2 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Crypto.RandomMonad: data RandomElementsListST s a
- Crypto.RandomMonad: getRandomElement :: (Unbox a) => STRef s (Vector a) -> RndST s a
+ Crypto.RandomMonad: getRandomElement :: Unbox a => (RandomElementsListST s a) -> RndST s a
- Crypto.RandomMonad: newRandomElementST :: Unbox a => [a] -> ST s (STRef s (Vector a))
+ Crypto.RandomMonad: newRandomElementST :: Unbox a => [a] -> ST s (RandomElementsListST s a)
- Crypto.RandomMonad: randomElementsLength :: (Unbox a, MonadTrans t, Monad (t (ST s))) => STRef s (Vector a) -> t (ST s) Int
+ Crypto.RandomMonad: randomElementsLength :: (Unbox a) => RandomElementsListST s a -> RndST s Int

Files

BitStringRandomMonad.cabal view
@@ -2,7 +2,7 @@ --  documentation, see http://haskell.org/cabal/users-guide/  name:                BitStringRandomMonad-version:             0.1.0.0+version:             0.1.1.1 description:         A library which turns a bytestring into a random monad.                      Input could be any PRNG which can output a lazy                      bytestring.
Crypto/RandomMonad.hs view
@@ -2,7 +2,7 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TypeFamilies #-} -module Crypto.RandomMonad (RndT, RndST, RndIO, Rnd, RndState, getRandomM, getRandom2M, runRndT, newRandomElementST, getRandomElement, randomElementsLength, replaceSeedM, addSeedM, getRandomByteStringM) where+module Crypto.RandomMonad (RndT, RndST, RndIO, Rnd, RndState, getRandomM, getRandom2M, runRndT, newRandomElementST, getRandomElement, randomElementsLength, replaceSeedM, addSeedM, getRandomByteStringM, RandomElementsListST()) where  import Control.Exception (Exception, throw) import Control.Monad.Identity (Identity)@@ -21,6 +21,7 @@ import qualified Data.Vector.Unboxed.Mutable as VM  data BitStringToRandomExceptions = OutOfElementsException deriving (Show, Typeable)+data RandomElementsListST s a = RandomElementsListST (STRef s (V.Vector a)) instance Exception BitStringToRandomExceptions  bitsNeeded :: Integer -> Integer@@ -70,11 +71,11 @@ getRandomByteString 0 x = (ByS.pack [], x) getRandomByteString len x = let (byte, newState) = getRandom 255 x ; (allBytes, lastState) = getRandomByteString (len - 1) newState in (ByS.cons (fromIntegral byte) allBytes, lastState) -newRandomElementST :: VM.Unbox a => [a] -> ST s (STRef s (V.Vector a))-newRandomElementST acc = newSTRef $ V.fromList acc+newRandomElementST :: VM.Unbox a => [a] -> ST s (RandomElementsListST s a)+newRandomElementST acc = (newSTRef $ V.fromList acc) >>= \ref -> return $ RandomElementsListST ref -getRandomElement :: (V.Unbox a) => STRef s (V.Vector a) -> RndST s a-getRandomElement ref = do+getRandomElement :: VM.Unbox a => (RandomElementsListST s a) -> RndST s a+getRandomElement (RandomElementsListST ref) = do   vec <- lift $ readSTRef ref   vec' <- lift $ V.unsafeThaw vec   let n = toInteger $ VM.length vec'@@ -88,7 +89,8 @@   lift $ writeSTRef ref $ V.unsafeTail vec''   return ab -randomElementsLength ref = do+randomElementsLength :: (VM.Unbox a) => RandomElementsListST s a -> RndST s Int+randomElementsLength (RandomElementsListST ref) = do   vec <- lift $ readSTRef ref   return $ V.length vec