@@ -4,12 +4,14 @@ import Effects
44
55data Random : Type -> Type -> Type -> Type where
66 getRandom : Random Integer Integer Integer
7+ setSeed : Integer -> Random Integer Integer ()
78
89using (m : Type -> Type)
910 instance Handler Random m where
1011 handle seed getRandom k
1112 = let seed' = (1664525 * seed + 1013904223) `prim__sremBigInt` (pow 2 32) in
1213 k seed' seed'
14+ handle seed (setSeed n) k = k n ()
1315
1416RND : EFFECT
1517RND = MkEff Integer Random
@@ -18,4 +20,6 @@ rndInt : Integer -> Integer -> Eff m [RND] Integer
1820rndInt lower upper = do v <- getRandom
1921 return (v `prim__sremBigInt` (upper - lower) + lower)
2022
23+srand : Integer -> Eff m [RND] ()
24+srand n = setSeed n
2125