packages feed

random-class 0.1.0.0 → 0.1.1.0

raw patch · 3 files changed

+24/−1 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Random: skip :: Gen g => Natural -> g -> g
+ Random: skipM :: (Gen g, Mut (PrimState m) g ~ MutVar (PrimState m) g, PrimMonad m) => Natural -> ReaderT (Mut (PrimState m) g) m ()
- Random: class Gen g where type Mut s g = m | m -> s g type Native g type Mut s g = MutVar s g uniformNativeM = ReaderT $ flip atomicModifyMutVar $ swap . runState uniformNative where {
+ Random: class Gen g where type Mut s g = m | m -> s g type Native g type Mut s g = MutVar s g uniformNativeM = ReaderT $ flip atomicModifyMutVar $ swap . runState uniformNative skip n = appEndo . stimes n . Endo $ execState uniformNative skipM = flip replicateA_ (() <$ uniformNativeM) where {

Files

Random.hs view
@@ -6,8 +6,10 @@ import Control.Monad.Trans.Reader import qualified Control.Monad.Trans.State as M import Data.Primitive.MutVar+import Data.Semigroup import Data.Tuple (swap) import Data.Void+import Numeric.Natural  import Util @@ -17,9 +19,18 @@     type Native g     uniformNative :: M.State g (Native g)     uniformNativeM :: PrimMonad m => ReaderT (Mut (PrimState m) g) m (Native g)+    skip :: Natural -> g -> g+    skipM :: PrimMonad m => Natural -> ReaderT (Mut (PrimState m) g) m ()+     default uniformNativeM :: (Mut (PrimState m) g ~ MutVar (PrimState m) g,                                PrimMonad m) => ReaderT (Mut (PrimState m) g) m (Native g)     uniformNativeM = ReaderT $ flip atomicModifyMutVar $ swap . M.runState uniformNative++    skip n = appEndo . stimes n . Endo $ M.execState uniformNative++    default skipM :: (Mut (PrimState m) g ~ MutVar (PrimState m) g,+                      PrimMonad m) => Natural -> ReaderT (Mut (PrimState m) g) m ()+    skipM = flip replicateA_ (() <$ uniformNativeM)  class Split g where     split :: g -> (g, g)
Util.hs view
@@ -1,12 +1,24 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE AllowAmbiguousTypes #-}  module Util where +import Control.Applicative import qualified Data.List as L+import Data.Semigroup import Numeric.Natural  replicateA :: Applicative p => Natural -> p a -> p [a] replicateA n = sequenceA . L.genericReplicate n++replicateA_ :: Applicative p => Natural -> p () -> p ()+replicateA_ n = unAp . stimes n . Ap++newtype Ap p a = Ap { unAp :: p a } deriving (Functor, Applicative)+instance (Applicative p, Semigroup a) => Semigroup (Ap p a) where (<>) = liftA2 (<>)+instance (Applicative p, Semigroup a, Monoid a) => Monoid (Ap p a) where+    mempty = pure mempty+    mappend = (<>)  card :: ∀ a . (Bounded a, Enum a) => Natural card = L.genericLength [minBound @a..]
random-class.cabal view
@@ -1,5 +1,5 @@ name:                random-class-version:             0.1.0.0+version:             0.1.1.0 synopsis:            Class of random value generation -- description:          license:             BSD3