{-# OPTIONS -cpp #-} {-# LANGUAGE RankNTypes, ScopedTypeVariables, MultiParamTypeClasses, FlexibleInstances, TypeSynonymInstances #-} module Curry.Module.RandomExternal (module Curry.Module.RandomExternal) where import Curry.RunTimeSystem import Curry.Module.Prelude -- begin included import System.Random prim_split :: C_Int -> Result (T2 C_Int C_Int) prim_split seed _ = toCurry (fst (next g1), fst (next g2)) where (g1,g2) = split (mkStdGen (fromCurry seed)) prim_nextInt :: C_Int -> Result (List C_Int) prim_nextInt seed _ = toCurry (nextInt (fromCurry seed)) nextInt :: Int -> [Int] nextInt = randoms . mkStdGen prim_nextIntRange :: C_Int -> C_Int -> Result (List C_Int) prim_nextIntRange seed bound _ = toCurry (nextIntRange (fromCurry seed) (fromCurry bound)) nextIntRange :: Int -> Int -> [Int] nextIntRange seed bound = randomRs (0,bound) (mkStdGen seed) getRandomSeed :: Result (C_IO C_Int) getRandomSeed = ioFunc0 (getStdRandom next) -- end included c_split :: Curry.Module.Prelude.C_Int -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.List Curry.Module.Prelude.C_Int c_split x1 st = let {x2 = Curry.Module.Prelude.op_36_35_35(Curry.Module.Prelude.pf(Curry.Module.RandomExternal.c_prim_split))(x1)(st)} in (Curry.Module.Prelude.:<)(Curry.Module.RandomExternal.c_split'46_'35selFP3'35s1(x2)(st))(Curry.Module.RandomExternal.c_split(Curry.Module.RandomExternal.c_split'46_'35selFP4'35s2(x2)(st))(st)) c_split'46_'35selFP3'35s1 :: (Curry.Module.Prelude.T2 Curry.Module.Prelude.C_Int Curry.Module.Prelude.C_Int) -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_Int c_split'46_'35selFP3'35s1 x1@(Curry.Module.Prelude.T2 x2 x3) st = x2 c_split'46_'35selFP3'35s1 (Curry.Module.Prelude.T2Or i xs) st = Curry.RunTimeSystem.mapOr(\ x st -> Curry.Module.RandomExternal.c_split'46_'35selFP3'35s1(x)(st))(i)(xs)(st) c_split'46_'35selFP3'35s1 x st = Curry.RunTimeSystem.patternFail("RandomExternal.split._#selFP3#s1")(x) c_split'46_'35selFP4'35s2 :: (Curry.Module.Prelude.T2 Curry.Module.Prelude.C_Int Curry.Module.Prelude.C_Int) -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_Int c_split'46_'35selFP4'35s2 x1@(Curry.Module.Prelude.T2 x2 x3) st = x3 c_split'46_'35selFP4'35s2 (Curry.Module.Prelude.T2Or i xs) st = Curry.RunTimeSystem.mapOr(\ x st -> Curry.Module.RandomExternal.c_split'46_'35selFP4'35s2(x)(st))(i)(xs)(st) c_split'46_'35selFP4'35s2 x st = Curry.RunTimeSystem.patternFail("RandomExternal.split._#selFP4#s2")(x) c_nextInt :: Curry.Module.Prelude.C_Int -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.List Curry.Module.Prelude.C_Int c_nextInt x1 st = Curry.Module.Prelude.op_36_35_35(Curry.Module.Prelude.pf(Curry.Module.RandomExternal.c_prim_nextInt))(x1)(st) c_nextIntRange :: Curry.Module.Prelude.C_Int -> Curry.Module.Prelude.C_Int -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.List Curry.Module.Prelude.C_Int c_nextIntRange x1 x2 st = Curry.Module.Prelude.op_36_35_35(Curry.Module.Prelude.op_36_35_35(Curry.Module.Prelude.cp(Curry.Module.Prelude.pa)(Curry.Module.Prelude.cp(Curry.Module.Prelude.pf))(Curry.Module.RandomExternal.c_prim_nextIntRange))(x1)(st))(x2)(st) c_nextBoolean :: Curry.Module.Prelude.C_Int -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.List Curry.Module.Prelude.C_Bool c_nextBoolean x1 st = Curry.Module.Prelude.c_map(Curry.Module.Prelude.pf(Curry.Module.Prelude.op_61_61(Curry.Module.Prelude.C_Zero)))(Curry.Module.RandomExternal.c_nextIntRange(x1)(Curry.Module.Prelude.C_Pos(Curry.Module.Prelude.C_IHi))(st))(st) c_prim_split :: Curry.Module.Prelude.C_Int -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.T2 Curry.Module.Prelude.C_Int Curry.Module.Prelude.C_Int c_prim_split x1 st = Curry.Module.RandomExternal.prim_split(x1)(st) c_prim_nextInt :: Curry.Module.Prelude.C_Int -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.List Curry.Module.Prelude.C_Int c_prim_nextInt x1 st = Curry.Module.RandomExternal.prim_nextInt(x1)(st) c_prim_nextIntRange :: Curry.Module.Prelude.C_Int -> Curry.Module.Prelude.C_Int -> Curry.RunTimeSystem.State -> Curry.Module.Prelude.List Curry.Module.Prelude.C_Int c_prim_nextIntRange x1 x2 st = Curry.Module.RandomExternal.prim_nextIntRange(x1)(x2)(st) c_getRandomSeed :: Curry.RunTimeSystem.State -> Curry.Module.Prelude.C_IO Curry.Module.Prelude.C_Int c_getRandomSeed st = Curry.Module.RandomExternal.getRandomSeed(st)