2 | module IdrisGL.Random
10 | frgn : String -> String
11 | frgn func = "C:" ++ func ++ ",random"
15 | %foreign frgn "randomInt"
16 | prim_randomInt : Int -> Int -> Int
28 | randomInt : (lower : Int) -> (upper : Int) -> Int
29 | randomInt lower upper = prim_randomInt lower upper
41 | randomNat : (lower : Nat) -> (upper : Nat) -> Nat
42 | randomNat lower upper = integerToNat . cast $
prim_randomInt (cast lower) (cast upper)
54 | randomFin : (lower : Nat) -> (upper : Nat) -> Maybe $
Fin upper
55 | randomFin lower upper = natToFin (randomNat lower upper) upper
58 | randomPick : List a -> Maybe a
59 | randomPick Nil = Nothing
61 | let i : Nat := randomNat 0 (minus (length l) 1)
63 | where randomPick' : Nat -> List a -> Maybe a
64 | randomPick' _ Nil = Nothing
65 | randomPick' 0 (x::xs) = Just x
66 | randomPick' i (x::xs) = randomPick' (minus i 1) xs