fused-effects-random-1.0.0.0: Random number generation for fused-effects.

Safe HaskellNone
LanguageHaskell2010

Control.Effect.Random

Contents

Synopsis

Random effect

data Random m k Source #

Constructors

Random a => Random (a -> m k) 
Random a => RandomR (a, a) (a -> m k) 
Interleave (m a) (a -> m k) 
Instances
HFunctor Random Source # 
Instance details

Defined in Control.Effect.Random

Methods

hmap :: Functor m => (forall x. m x -> n x) -> Random m a -> Random n a #

Effect Random Source # 
Instance details

Defined in Control.Effect.Random

Methods

thread :: (Functor ctx, Monad m) => ctx () -> (forall x. ctx (m x) -> n (ctx x)) -> Random m a -> Random n (ctx a) #

Functor m => Functor (Random m) Source # 
Instance details

Defined in Control.Effect.Random

Methods

fmap :: (a -> b) -> Random m a -> Random m b #

(<$) :: a -> Random m b -> Random m a #

(Algebra sig m, Effect sig, RandomGen g) => Algebra (Random :+: sig) (RandomC g m) Source # 
Instance details

Defined in Control.Effect.Random

Methods

alg :: (Random :+: sig) (RandomC g m) a -> RandomC g m a #

getRandom :: (Has Random sig m, Random a) => m a Source #

getRandomR :: (Has Random sig m, Random a) => (a, a) -> m a Source #

interleave :: Has Random sig m => m a -> m a Source #

Random carrier

runRandom :: g -> RandomC g m a -> m (g, a) Source #

Run a random computation starting from a given generator.

run (runRandom (PureGen a) (pure b)) === (PureGen a, b)

evalRandom :: Functor m => g -> RandomC g m a -> m a Source #

Run a random computation starting from a given generator and discarding the final generator.

run (evalRandom (PureGen a) (pure b)) === b

execRandom :: Functor m => g -> RandomC g m a -> m g Source #

Run a random computation starting from a given generator and discarding the final result.

run (execRandom (PureGen a) (pure b)) === PureGen a

evalRandomIO :: MonadIO m => RandomC StdGen m a -> m a Source #

Run a random computation in IO, splitting the global standard generator to get a new one for the computation.

newtype RandomC g m a Source #

Constructors

RandomC 

Fields

Instances
MonadTrans (RandomC g) Source # 
Instance details

Defined in Control.Effect.Random

Methods

lift :: Monad m => m a -> RandomC g m a #

Monad m => Monad (RandomC g m) Source # 
Instance details

Defined in Control.Effect.Random

Methods

(>>=) :: RandomC g m a -> (a -> RandomC g m b) -> RandomC g m b #

(>>) :: RandomC g m a -> RandomC g m b -> RandomC g m b #

return :: a -> RandomC g m a #

fail :: String -> RandomC g m a #

Functor m => Functor (RandomC g m) Source # 
Instance details

Defined in Control.Effect.Random

Methods

fmap :: (a -> b) -> RandomC g m a -> RandomC g m b #

(<$) :: a -> RandomC g m b -> RandomC g m a #

MonadFix m => MonadFix (RandomC g m) Source # 
Instance details

Defined in Control.Effect.Random

Methods

mfix :: (a -> RandomC g m a) -> RandomC g m a #

MonadFail m => MonadFail (RandomC g m) Source # 
Instance details

Defined in Control.Effect.Random

Methods

fail :: String -> RandomC g m a #

Monad m => Applicative (RandomC g m) Source # 
Instance details

Defined in Control.Effect.Random

Methods

pure :: a -> RandomC g m a #

(<*>) :: RandomC g m (a -> b) -> RandomC g m a -> RandomC g m b #

liftA2 :: (a -> b -> c) -> RandomC g m a -> RandomC g m b -> RandomC g m c #

(*>) :: RandomC g m a -> RandomC g m b -> RandomC g m b #

(<*) :: RandomC g m a -> RandomC g m b -> RandomC g m a #

(Alternative m, Monad m) => MonadPlus (RandomC g m) Source # 
Instance details

Defined in Control.Effect.Random

Methods

mzero :: RandomC g m a #

mplus :: RandomC g m a -> RandomC g m a -> RandomC g m a #

MonadIO m => MonadIO (RandomC g m) Source # 
Instance details

Defined in Control.Effect.Random

Methods

liftIO :: IO a -> RandomC g m a #

(Algebra sig m, Effect sig, RandomGen g) => MonadRandom (RandomC g m) Source # 
Instance details

Defined in Control.Effect.Random

Methods

getRandomR :: Random a => (a, a) -> RandomC g m a #

getRandom :: Random a => RandomC g m a #

getRandomRs :: Random a => (a, a) -> RandomC g m [a] #

getRandoms :: Random a => RandomC g m [a] #

(Algebra sig m, Effect sig, RandomGen g) => MonadInterleave (RandomC g m) Source # 
Instance details

Defined in Control.Effect.Random

Methods

interleave :: RandomC g m a -> RandomC g m a #

(Alternative m, Monad m) => Alternative (RandomC g m) Source # 
Instance details

Defined in Control.Effect.Random

Methods

empty :: RandomC g m a #

(<|>) :: RandomC g m a -> RandomC g m a -> RandomC g m a #

some :: RandomC g m a -> RandomC g m [a] #

many :: RandomC g m a -> RandomC g m [a] #

(Algebra sig m, Effect sig, RandomGen g) => Algebra (Random :+: sig) (RandomC g m) Source # 
Instance details

Defined in Control.Effect.Random

Methods

alg :: (Random :+: sig) (RandomC g m) a -> RandomC g m a #

Re-exports

type Has (eff :: (Type -> Type) -> Type -> Type) (sig :: (Type -> Type) -> Type -> Type) (m :: Type -> Type) = (Members eff sig, Algebra sig m) #

m is a carrier for sig containing eff.

Note that if eff is a sum, it will be decomposed into multiple Member constraints. While this technically allows one to combine multiple unrelated effects into a single Has constraint, doing so has two significant drawbacks:

  1. Due to a problem with recursive type families, this can lead to significantly slower compiles.
  2. It defeats ghc’s warnings for redundant constraints, and thus can lead to a proliferation of redundant constraints as code is changed.

run :: Identity a -> a #

Run an action exhausted of effects to produce its final result value.

Since: fused-effects-1.0.0.0