{-# OPTIONS --cubical-compatible --guardedness #-}
module Effect.Monad.Random.Instances where
open import IO.Base using (IO)
open import Level renaming (suc to lsuc)
open import Effect.Monad.Random
instance
ioMonadRandChar = Char.monadRandom
ioMonadRandRChar = Char.monadRandomR
ioMonadRandFloat = Float.monadRandom
ioMonadRandRFloat = Float.monadRandomR
ioMonadRandℤ = ℤ.monadRandom
ioMonadRandRℤ = ℤ.monadRandomR
ioMonadRandℕ = ℕ.monadRandom
ioMonadRandRℕ = ℕ.monadRandomR
ioMonadRandWord64 = Word64.monadRandom
ioMonadRandRWord64 = Word64.monadRandomR
ioMonadRandFin = λ {n} {{nz}} → Fin.monadRandom n {{nz}}
ioMonadRandRFin = λ {n} {{nz}} → Fin.monadRandomR n {{nz}}
ioMonadRandBool = Bool.monadRandom
ioMonadRandRBool = Bool.monadRandomR
ioMonadRandList = λ {a} {A} {{rA}} → List.monadRandom {a} {A} (RawMonadRandom.getRandom {a} {lsuc a} {A} {IO} rA)
ioMonadRandVec = λ {a} {A} {{rA}} {n} → Vec.monadRandom {a} {A} (RawMonadRandom.getRandom {a} {lsuc a} {A} {IO} rA) n
ioMonadRandVec≤ = λ {a} {A} {{rA}} {n} → Vec≤.monadRandom {a} {A} (RawMonadRandom.getRandom {a} {lsuc a} {A} {IO} rA) n
ioMonadRandString = String.monadRandom
ioMonadRandString≤ = λ {n} → String≤.monadRandom n
ioMonadRandRangedString≤ = λ {a} {b} .{a≤b} {n} → RangedString≤.monadRandom a b a≤b n
stateTMonadRand = λ {a} {s} {A} {S} {M} {{m}} {{mrand}} → liftStateT {a} {s} {A} {S} {M} m mrand
stateTMonadRandR = λ {a} {s} {A} {R} {S} {M} {{m}} {{mrand}} → liftRStateT {a} {s} {A} {R} {S} {M} m mrand
readerTMonadRand = λ {a} {b} {A} {B} {M} {{mrand}} → liftReaderT {a} {b} {A} {B} {M} mrand
readerTMonadRandR = λ {a} {b} {A} {R} {B} {M} {{mrand}} → liftRReaderT {a} {b} {A} {R} {B} {M} mrand
writerTMonadRand = λ {a} {f} {w} {A} {W} {M} {{m}} {{mrand}} → liftWriterT {a} {f} {w} {A} {W} {M} m mrand
writerTMonadRandR = λ {a} {f} {w} {A} {R} {W} {M} {{m}} {{mrand}} → liftRWriterT {a} {f} {w} {A} {R} {W} {M} m mrand