axel-0.0.11: src/Axel/Eff/Random.hs
{-# LANGUAGE GADTs #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
module Axel.Eff.Random where
import Axel.Prelude
import qualified Polysemy as Sem
import qualified System.Random as R
data Random m a where
Random :: (R.Random a) => Random m a
Sem.makeSem ''Random
runRandom ::
(Sem.Member (Sem.Embed IO) effs)
=> Sem.Sem (Random ': effs) a
-> Sem.Sem effs a
runRandom =
Sem.interpret $ \case
(Random :: Random m a) -> Sem.embed $ R.randomIO @a