on master help sign in
Removed unreliable machine ints from Random effect
c05479eJan Bessai
effects/Effect/Random.idr+7−7
@@ -3,19 +3,19 @@ module Effect.Random
3import Effects
3import Effects
4
4
5data Random : Type -> Type -> Type -> Type where
5data Random : Type -> Type -> Type -> Type where
6− getRandom : Random Int Int Int
6+ getRandom : Random Integer Integer Integer
7
7
8using (m : Type -> Type)
8using (m : Type -> Type)
9 instance Handler Random m where
9 instance Handler Random m where
10 handle seed getRandom k
10 handle seed getRandom k
11− = let seed' = 1664525 * seed + 1013904223 in
11+ = let seed' = (1664525 * seed + 1013904223) `prim__modBigInt` (pow 2 32) in
12 k seed' seed'
12 k seed' seed'
13−
13+
14RND : EFFECT
14RND : EFFECT
15−RND = MkEff Int Random
15+RND = MkEff Integer Random
16
16
17−rndInt : Int -> Int -> Eff m [RND] Int
17+rndInt : Integer -> Integer -> Eff m [RND] Integer
18−rndInt lower upper = do v <- getRandom
18+rndInt lower upper = do v <- getRandom
19− return (v `mod` (upper - lower) + lower)
19+ return (v `prim__modBigInt` (upper - lower) + lower)
20
20
21
21
test/test021/test021a.idr+5−5
@@ -6,18 +6,18 @@ import Effect.Random
6import Effect.StdIO
6import Effect.StdIO
7
7
8data Expr = Var String
8data Expr = Var String
9− | Val Int
9+ | Val Integer
10 | Add Expr Expr
10 | Add Expr Expr
11− | Random Int
11+ | Random Integer
12
12
13Env : Type
13Env : Type
14−Env = List (String, Int)
14+Env = List (String, Integer)
15
15
16-- Evaluator : Type -> Type
16-- Evaluator : Type -> Type
17-- Evaluator t
17-- Evaluator t
18-- = Eff m [EXCEPTION String, RND, STATE Env] t
18-- = Eff m [EXCEPTION String, RND, STATE Env] t
19
19
20−eval : Expr -> Eff IO [EXCEPTION String, STDIO, RND, STATE Env] Int
20+eval : Expr -> Eff IO [EXCEPTION String, STDIO, RND, STATE Env] Integer
21eval (Var x) = do vs <- get
21eval (Var x) = do vs <- get
22 case lookup x vs of
22 case lookup x vs of
23 Nothing => raise ("No such variable " ++ x)
23 Nothing => raise ("No such variable " ++ x)
@@ -31,7 +31,7 @@ eval (Random upper) = do val <- rndInt 0 upper
31testExpr : Expr
31testExpr : Expr
32testExpr = Add (Add (Var "foo") (Val 42)) (Random 100)
32testExpr = Add (Add (Var "foo") (Val 42)) (Random 100)
33
33
34−runEval : List (String, Int) -> Expr -> IO Int
34+runEval : List (String, Integer) -> Expr -> IO Integer
35runEval args expr = run [(), (), 123456, args] (eval expr)
35runEval args expr = run [(), (), 123456, args] (eval expr)
36
36
37main : IO ()
37main : IO ()