-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Experimental, RandomFu effect and interpreters for polysemy
--
-- Please see the README on GitHub at
-- https://github.com/adamConnerSax/polysemy-Extra/tree/master/polysemy-RandomFu#polysemy-randomfu
@package polysemy-RandomFu
@version 0.5.0.0
module Polysemy.ConstraintAbsorber.MonadRandom
-- | Polysemy "random-fu" effect. This can be run in a few ways: 1.
-- Directly in IO 2. Using any RandomSource from
-- "random-fu" 3. In IO, using a given PureMT source.
-- (IO is used to put the source in an IORef)
--
-- This module also contains the type-class instances to enable
-- "absorbing" MonadRandom, ala Polysemy.MTL. See the tests for MTL or
-- RandomFu for examples of that in use.
module Polysemy.RandomFu
-- | An effect capable of sampling from a "random-fu" RVar or generating a
-- single random-variate of any type, t with a
-- Data.Random.Prim t constructor, currently one of
-- Word8, Word16, Word32, Word64,
-- Double or N-byte integer.
data RandomFu m r
[SampleRVar] :: RVar t -> RandomFu m t
sampleRVar :: forall r_af5O t_aeZW. Member RandomFu r_af5O => RVar t_aeZW -> Sem r_af5O t_aeZW
-- | use the RandomFu effect to sample from a "random-fu"
-- Distribution.
sampleDist :: (Member RandomFu r, Distribution d t) => d t -> Sem r t
-- | Run a Random effect using a given RandomSource
runRandomSource :: forall s m r a. (StatefulGen s m, RandomSource m s, Member (Embed m) r) => s -> Sem (RandomFu : r) a -> Sem r a
-- | Run a Random effect by using the default "random-fu"
-- IO source
runRandomIO :: forall r a. MonadIO (Sem r) => Sem (RandomFu : r) a -> Sem r a
-- | Run in IO, using the given PureMT source, stored in an
-- IORef
runRandomIOPureMT :: Member (Embed IO) r => PureMT -> Sem (RandomFu : r) a -> Sem r a