on f8ea178 help sign in
21 lines 561 B history raw
1module Effect.Random
3import Effects
5data Random : Type -> Type -> Type -> Type where
6 getRandom : Random Integer Integer Integer
8using (m : Type -> Type)
9 instance Handler Random m where
10 handle seed getRandom k
11 = let seed' = (1664525 * seed + 1013904223) `prim__sremBigInt` (pow 2 32) in
12 k seed' seed'
14RND : EFFECT
15RND = MkEff Integer Random
17rndInt : Integer -> Integer -> Eff m [RND] Integer
18rndInt lower upper = do v <- getRandom
19 return (v `prim__sremBigInt` (upper - lower) + lower)