@hackage polysemy-RandomFu0.5.0.0
Experimental, RandomFu effect and interpreters for polysemy
Installation
Tested Compilers
Dependencies (9)
- base >=4.7 && <5
- mtl >=2.0 && <2.3
- polysemy >=1.3 && <1.8
- polysemy-plugin >0.2.0 && <0.5
- polysemy-zoo >=0.6.0 && <0.9
- random >=1.2.1 && <1.3 Show all…
Dependents (1)
@hackage/knit-haskell
polysemy-RandomFu v0.5.0.0
Summary
- Polysemy effect and intepreters to use the random-fu library in a polysemy effect union (like an mtl stack).
- Includes a constraint "absorber" (see https://github.com/isovector/polysemy-zoo/blob/master/src/Polysemy/ConstraintAbsorber.hs) for
the random-fu
MonadRandomtypeclass. - NB: If you compile with random-fu >= 0.3.0.0, there is no longer a constraint absorber in this library since random-fu no longer uses random-source or MonadRandom.
Example (from the tests)
import Polysemy
import Polysemy.RandomFu
import qualified Data.Random as R
import qualified Data.Random.Source.PureMT as R
getRandomInts :: Member RandomFu r => Int -> Sem r [Int]
getRandomInts nDraws =
sampleRVar $ M.replicateM nDraws (R.uniform 0 (100 :: Int))
main :: IO ()
main = do
seed <- R.newPureMT
putStrLn . show $ runM . runRandomIOPureMT (R.pureMT seed) $ getRandomInts 5
should print a list of 5 pseudo-random integers.
They will be different each time you run because the newPureMT function
returns a different seed each time it's called. If you replace that seed in
the R.pureMT argument to runRandomIOPureMT with a fixed number
then you will get the same pseudo-random sequences each time. This can be
useful for testing.
Notes
- See the tests (in https://github.com/adamConnerSax/Polysemy-Extra/blob/master/polysemy-RandomFu/test/RandomFuSpec.hs) for more details about how to use this effect