mcmc-0.7.0.0: src/Mcmc/Internal/Random.hs
{-# LANGUAGE ScopedTypeVariables #-}
-- |
-- Module : Mcmc.Internal.Random
-- Description : Tools for random calculations
-- Copyright : 2021 Dominik Schrempf
-- License : GPL-3.0-or-later
--
-- Maintainer : dominik.schrempf@gmail.com
-- Stability : unstable
-- Portability : portable
--
-- Creation date: Wed Nov 25 07:14:52 2020.
module Mcmc.Internal.Random
( saveGen,
loadGen,
)
where
import Data.IORef
import Data.Word
import System.Random.Internal
import System.Random.SplitMix
import System.Random.Stateful
-- | Save a generator to a seed.
saveGen :: IOGenM StdGen -> IO (Word64, Word64)
saveGen (IOGenM r) = do
(StdGen g) <- readIORef r
pure $ unseedSMGen g
-- | Load a generator from a seed.
loadGen :: (Word64, Word64) -> IO (IOGenM StdGen)
loadGen s = newIOGenM $ StdGen $ seedSMGen' s