-- 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.1.0.0 -- | 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 [GetRandomPrim] :: Prim t -> RandomFu m t sampleRVar :: forall r_ajvK r_agJL. Member RandomFu r_ajvK => RVar r_agJL -> Sem r_ajvK r_agJL getRandomPrim :: forall r_ajvL r_agJL. Member RandomFu r_ajvL => Prim r_agJL -> Sem r_ajvL r_agJL -- | 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 r a. RandomSource (Sem r) s => 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 :: MonadIO (Sem r) => PureMT -> Sem (RandomFu : r) a -> Sem r a -- | Absorb an MonadRandom constraint. That is, use a -- Member RandomFu r constraint to satisfy the -- MonadRandom constraint in a (forall m. MonadRandom m -- => m a), returning a Sem r a@. See MTL for details. absorbMonadRandom :: Member RandomFu r => (MonadRandom (Sem r) => Sem r a) -> Sem r a instance (GHC.Base.Monad m, Data.Reflection.Reifies s' (Polysemy.MTL.Dict1 Data.Random.Internal.Source.MonadRandom m)) => Data.Random.Internal.Source.MonadRandom (Polysemy.MTL.ConstrainedAction Data.Random.Internal.Source.MonadRandom m s') instance Polysemy.Internal.Union.Member Polysemy.RandomFu.RandomFu r => Polysemy.MTL.IsCanonicalEffect Data.Random.Internal.Source.MonadRandom r instance Polysemy.MTL.ReifiableConstraint1 Data.Random.Internal.Source.MonadRandom