BitStringRandomMonad 0.2.0.2 → 1.0.0.1
raw patch · 2 files changed
+6/−5 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Crypto.RandomMonad: data RandomElementsListST s a
+ Crypto.RandomMonad: data RandomElementsListST a s
- Crypto.RandomMonad: getRandomElement :: Unbox a => (RandomElementsListST s a) -> RndST s a
+ Crypto.RandomMonad: getRandomElement :: (RandomElementsListST a s) -> RndST s a
- Crypto.RandomMonad: newRandomElementST :: Unbox a => [a] -> ST s (RandomElementsListST s a)
+ Crypto.RandomMonad: newRandomElementST :: Unbox a => [a] -> ST s (RandomElementsListST a s)
- Crypto.RandomMonad: randomElementsLength :: (Unbox a) => RandomElementsListST s a -> RndST s Int
+ Crypto.RandomMonad: randomElementsLength :: RandomElementsListST a s -> RndST s Int
Files
- BitStringRandomMonad.cabal +1/−1
- Crypto/RandomMonad.hs +5/−4
BitStringRandomMonad.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: BitStringRandomMonad-version: 0.2.0.2+version: 1.0.0.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,6 +2,7 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE Trustworthy #-}+{-# LANGUAGE GADTs #-} module Crypto.RandomMonad (RndT, RndST, RndIO, Rnd, RndState, getRandomM, getRandom2M, runRndT, newRandomElementST, getRandomElement, randomElementsLength, replaceSeedM, addSeedM, getRandomByteStringM, RandomElementsListST, RndStateList(..), BitStringToRandomExceptions(..)) where @@ -22,7 +23,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))+data RandomElementsListST a s = VM.Unbox a => RandomElementsListST (STRef s (V.Vector a)) instance Exception BitStringToRandomExceptions bitsNeeded :: Integer -> Integer@@ -79,10 +80,10 @@ 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 (RandomElementsListST s a)+newRandomElementST :: VM.Unbox a => [a] -> ST s (RandomElementsListST a s) newRandomElementST acc = (newSTRef $ V.fromList acc) >>= \ref -> return $ RandomElementsListST ref -getRandomElement :: VM.Unbox a => (RandomElementsListST s a) -> RndST s a+getRandomElement :: (RandomElementsListST a s) -> RndST s a getRandomElement (RandomElementsListST ref) = do vec <- lift $ readSTRef ref vec' <- lift $ V.unsafeThaw vec@@ -97,7 +98,7 @@ lift $ writeSTRef ref $ V.unsafeTail vec'' return ab -randomElementsLength :: (VM.Unbox a) => RandomElementsListST s a -> RndST s Int+randomElementsLength :: RandomElementsListST a s -> RndST s Int randomElementsLength (RandomElementsListST ref) = do vec <- lift $ readSTRef ref return $ V.length vec