MonadRandom 0.6.1 → 0.6.2
raw patch · 5 files changed
+21/−7 lines, 5 filesdep ~randomPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: random
API changes (from Hackage documentation)
+ Control.Monad.Random.Lazy: --
+ Control.Monad.Random.Lazy: -- > fromSeed (toSeed gen) == gen
+ Control.Monad.Random.Lazy: -- </pre>
+ Control.Monad.Random.Lazy: -- <pre>
+ Control.Monad.Random.Lazy: -- pseudo-random number generator. It should be big enough to satisfy the
+ Control.Monad.Random.Lazy: -- roundtrip property:
+ Control.Monad.Random.Lazy: -- | Number of bytes that is required for storing the full state of a
+ Control.Monad.Random.Lazy: class (KnownNat SeedSize g, 1 <= SeedSize g, Typeable g) => SeedGen g where {
+ Control.Monad.Random.Lazy: class RandomGen g => SplitGen g
+ Control.Monad.Random.Lazy: data () => Seed g
+ Control.Monad.Random.Lazy: fromSeed :: SeedGen g => Seed g -> g
+ Control.Monad.Random.Lazy: fromSeed64 :: SeedGen g => NonEmpty Word64 -> g
+ Control.Monad.Random.Lazy: mkSeed :: (SeedGen g, MonadFail m) => ByteArray -> m (Seed g)
+ Control.Monad.Random.Lazy: mkSeedFromByteString :: (SeedGen g, MonadFail m) => ByteString -> m (Seed g)
+ Control.Monad.Random.Lazy: mkStdGen64 :: Word64 -> StdGen
+ Control.Monad.Random.Lazy: nonEmptyFromSeed :: SeedGen g => Seed g -> NonEmpty Word64
+ Control.Monad.Random.Lazy: nonEmptyToSeed :: SeedGen g => NonEmpty Word64 -> Seed g
+ Control.Monad.Random.Lazy: seedGenTypeName :: SeedGen g => String
+ Control.Monad.Random.Lazy: seedSize :: SeedGen g => Int
+ Control.Monad.Random.Lazy: seedSizeProxy :: forall proxy g. SeedGen g => proxy g -> Int
+ Control.Monad.Random.Lazy: splitGen :: SplitGen g => g -> (g, g)
+ Control.Monad.Random.Lazy: toSeed :: SeedGen g => g -> Seed g
+ Control.Monad.Random.Lazy: toSeed64 :: SeedGen g => g -> NonEmpty Word64
+ Control.Monad.Random.Lazy: type family SeedSize g :: Nat
+ Control.Monad.Random.Lazy: unSeed :: Seed g -> ByteArray
+ Control.Monad.Random.Lazy: unSeedToByteString :: Seed g -> ByteString
+ Control.Monad.Random.Lazy: uniformByteArray :: RandomGen g => Bool -> Int -> g -> (ByteArray, g)
+ Control.Monad.Random.Lazy: uniformByteString :: RandomGen g => Int -> g -> (ByteString, g)
+ Control.Monad.Random.Lazy: uniformFillMutableByteArray :: RandomGen g => MutableByteArray s -> Int -> Int -> g -> ST s g
+ Control.Monad.Random.Lazy: uniformList :: (Uniform a, RandomGen g) => Int -> g -> ([a], g)
+ Control.Monad.Random.Lazy: uniformListR :: (UniformRange a, RandomGen g) => Int -> (a, a) -> g -> ([a], g)
+ Control.Monad.Random.Lazy: uniformRs :: (UniformRange a, RandomGen g) => (a, a) -> g -> [a]
+ Control.Monad.Random.Lazy: uniformShortByteString :: RandomGen g => Int -> g -> (ShortByteString, g)
+ Control.Monad.Random.Lazy: uniformShuffleList :: RandomGen g => [a] -> g -> ([a], g)
+ Control.Monad.Random.Lazy: uniforms :: (Uniform a, RandomGen g) => g -> [a]
+ Control.Monad.Random.Lazy: unsafeUniformFillMutableByteArray :: RandomGen g => MutableByteArray s -> Int -> Int -> g -> ST s g
+ Control.Monad.Random.Lazy: withSeed :: SeedGen g => Seed g -> (g -> (a, g)) -> (a, Seed g)
+ Control.Monad.Random.Lazy: withSeedFile :: (SeedGen g, MonadIO m) => FilePath -> (Seed g -> m (a, Seed g)) -> m a
+ Control.Monad.Random.Lazy: withSeedM :: (SeedGen g, Functor f) => Seed g -> (g -> f (a, g)) -> f (a, Seed g)
+ Control.Monad.Random.Lazy: }
+ Control.Monad.Random.Strict: --
+ Control.Monad.Random.Strict: -- > fromSeed (toSeed gen) == gen
+ Control.Monad.Random.Strict: -- </pre>
+ Control.Monad.Random.Strict: -- <pre>
+ Control.Monad.Random.Strict: -- pseudo-random number generator. It should be big enough to satisfy the
+ Control.Monad.Random.Strict: -- roundtrip property:
+ Control.Monad.Random.Strict: -- | Number of bytes that is required for storing the full state of a
+ Control.Monad.Random.Strict: class (KnownNat SeedSize g, 1 <= SeedSize g, Typeable g) => SeedGen g where {
+ Control.Monad.Random.Strict: class RandomGen g => SplitGen g
+ Control.Monad.Random.Strict: data () => Seed g
+ Control.Monad.Random.Strict: fromSeed :: SeedGen g => Seed g -> g
+ Control.Monad.Random.Strict: fromSeed64 :: SeedGen g => NonEmpty Word64 -> g
+ Control.Monad.Random.Strict: mkSeed :: (SeedGen g, MonadFail m) => ByteArray -> m (Seed g)
+ Control.Monad.Random.Strict: mkSeedFromByteString :: (SeedGen g, MonadFail m) => ByteString -> m (Seed g)
+ Control.Monad.Random.Strict: mkStdGen64 :: Word64 -> StdGen
+ Control.Monad.Random.Strict: nonEmptyFromSeed :: SeedGen g => Seed g -> NonEmpty Word64
+ Control.Monad.Random.Strict: nonEmptyToSeed :: SeedGen g => NonEmpty Word64 -> Seed g
+ Control.Monad.Random.Strict: seedGenTypeName :: SeedGen g => String
+ Control.Monad.Random.Strict: seedSize :: SeedGen g => Int
+ Control.Monad.Random.Strict: seedSizeProxy :: forall proxy g. SeedGen g => proxy g -> Int
+ Control.Monad.Random.Strict: splitGen :: SplitGen g => g -> (g, g)
+ Control.Monad.Random.Strict: toSeed :: SeedGen g => g -> Seed g
+ Control.Monad.Random.Strict: toSeed64 :: SeedGen g => g -> NonEmpty Word64
+ Control.Monad.Random.Strict: type family SeedSize g :: Nat
+ Control.Monad.Random.Strict: unSeed :: Seed g -> ByteArray
+ Control.Monad.Random.Strict: unSeedToByteString :: Seed g -> ByteString
+ Control.Monad.Random.Strict: uniformByteArray :: RandomGen g => Bool -> Int -> g -> (ByteArray, g)
+ Control.Monad.Random.Strict: uniformByteString :: RandomGen g => Int -> g -> (ByteString, g)
+ Control.Monad.Random.Strict: uniformFillMutableByteArray :: RandomGen g => MutableByteArray s -> Int -> Int -> g -> ST s g
+ Control.Monad.Random.Strict: uniformList :: (Uniform a, RandomGen g) => Int -> g -> ([a], g)
+ Control.Monad.Random.Strict: uniformListR :: (UniformRange a, RandomGen g) => Int -> (a, a) -> g -> ([a], g)
+ Control.Monad.Random.Strict: uniformRs :: (UniformRange a, RandomGen g) => (a, a) -> g -> [a]
+ Control.Monad.Random.Strict: uniformShortByteString :: RandomGen g => Int -> g -> (ShortByteString, g)
+ Control.Monad.Random.Strict: uniformShuffleList :: RandomGen g => [a] -> g -> ([a], g)
+ Control.Monad.Random.Strict: uniforms :: (Uniform a, RandomGen g) => g -> [a]
+ Control.Monad.Random.Strict: unsafeUniformFillMutableByteArray :: RandomGen g => MutableByteArray s -> Int -> Int -> g -> ST s g
+ Control.Monad.Random.Strict: withSeed :: SeedGen g => Seed g -> (g -> (a, g)) -> (a, Seed g)
+ Control.Monad.Random.Strict: withSeedFile :: (SeedGen g, MonadIO m) => FilePath -> (Seed g -> m (a, Seed g)) -> m a
+ Control.Monad.Random.Strict: withSeedM :: (SeedGen g, Functor f) => Seed g -> (g -> f (a, g)) -> f (a, Seed g)
+ Control.Monad.Random.Strict: }
Files
- CHANGES.markdown +6/−0
- Control/Monad/Random/Class.hs +4/−4
- Control/Monad/Trans/Random/Lazy.hs +4/−0
- Control/Monad/Trans/Random/Strict.hs +4/−0
- MonadRandom.cabal +3/−3
CHANGES.markdown view
@@ -1,3 +1,9 @@+0.6.2 (5 March 2025)+--------------------++- Support `random-1.3`. Thanks to @bgamari and @lehins for help+ making the necessary updates.+ 0.6.1 (22 October 2024) -----------------------
Control/Monad/Random/Class.hs view
@@ -366,7 +366,7 @@ -- Subtract from 1 to match the way uniform Double values are -- generated, and hence match the old behavior of this function. let p = s * (1 - toRational (w :: Word64) / toRational (maxBound :: Word64))- return . Just . fst . head . dropWhile ((< p) . snd) $ cums+ return . fmap fst . F.find ((>= p) . snd) $ cums -- | Sample a value uniformly from a nonempty collection of elements. uniform :: (F.Foldable t, MonadRandom m) => t a -> m a@@ -386,12 +386,12 @@ -- The old implementation of `fromListMay`, for comparison. See -- https://github.com/byorgey/MonadRandom/issues/53 and -- https://byorgey.github.io/blog/posts/2024/10/14/MonadRandom-version-bump.html-fromListMayOld :: MonadRandom m => [(a, Rational)] -> m (Maybe a)-fromListMayOld xs = do+_fromListMayOld :: MonadRandom m => [(a, Rational)] -> m (Maybe a)+_fromListMayOld xs = do let s = fromRational (sum (map snd xs)) :: Double cums = scanl1 (\ ~(_, q) ~(y, s') -> (y, s' + q)) xs if s <= 0 then return Nothing else do p <- liftM toRational $ getRandomR (0, s)- return . Just . fst . head . dropWhile ((< p) . snd) $ cums+ return . fmap fst . F.find ((>= p) . snd) $ cums
Control/Monad/Trans/Random/Lazy.hs view
@@ -282,7 +282,11 @@ uniformWord16 = applyRandT genWord16 uniformWord32 = applyRandT genWord32 uniformWord64 = applyRandT genWord64+#if MIN_VERSION_random(1,3,0)+ uniformByteArrayM pinned sz = applyRandT $ uniformByteArray pinned sz+#else uniformShortByteString n = applyRandT (genShortByteString n)+#endif -- | --
Control/Monad/Trans/Random/Strict.hs view
@@ -289,7 +289,11 @@ uniformWord16 = applyRandT genWord16 uniformWord32 = applyRandT genWord32 uniformWord64 = applyRandT genWord64+#if MIN_VERSION_random(1,3,0)+ uniformByteArrayM pinned sz = applyRandT $ uniformByteArray pinned sz+#else uniformShortByteString n = applyRandT (genShortByteString n)+#endif -- | --
MonadRandom.cabal view
@@ -1,5 +1,5 @@ name: MonadRandom-version: 0.6.1+version: 0.6.2 synopsis: Random-number generation monad. description: Support for computations which consume random values. license: BSD3@@ -11,7 +11,7 @@ build-type: Simple cabal-version: >=1.10 extra-source-files: CHANGES.markdown-tested-with: GHC ==7.10.3 || ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.8 || ==9.4.8 || ==9.6.5 || ==9.8.2 || ==9.10.1+tested-with: GHC ==7.10.3 || ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.8 || ==9.4.8 || ==9.6.6 || ==9.8.2 || ==9.10.1 || ==9.12.1 source-repository head type: git@@ -32,7 +32,7 @@ transformers-compat >=0.4 && <0.8, mtl >=2.2.1 && <2.3 || >= 2.3.1 && < 2.4, primitive >=0.6 && <0.10,- random >=1.0.1 && <1.3+ random >=1.0.1 && <1.4 ghc-options: -Wall default-language: Haskell2010 other-extensions: Safe