diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/library/lux/math/random.lux | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/stdlib/source/library/lux/math/random.lux b/stdlib/source/library/lux/math/random.lux index 13bac71cf..469a17226 100644 --- a/stdlib/source/library/lux/math/random.lux +++ b/stdlib/source/library/lux/math/random.lux @@ -195,30 +195,28 @@ (def: .public (and left right) (All (_ a b) (-> (Random a) (Random b) (Random [a b]))) - (do ..monad - [=left left - =right right] - (in [=left =right]))) + (function (_ prng) + (let [[prng left] (left prng) + [prng right] (right prng)] + [prng [left right]]))) (def: .public (or left right) (All (_ a b) (-> (Random a) (Random b) (Random (Or a b)))) - (do [! ..monad] - [? bit] - (if ? - (do ! - [=left left] - (in {0 #0 =left})) - (do ! - [=right right] - (in {0 #1 =right}))))) + (function (_ prng) + (let [[prng ?] (..bit prng)] + (if ? + (let [[prng left] (left prng)] + [prng {0 #0 left}]) + (let [[prng right] (right prng)] + [prng {0 #1 right}]))))) (def: .public (either left right) (All (_ a) (-> (Random a) (Random a) (Random a))) - (do ..monad - [? bit] - (if ? - left - right))) + (function (_ prng) + (let [[prng ?] (..bit prng)] + (if ? + (left prng) + (right prng))))) (def: .public (rec gen) (All (_ a) (-> (-> (Random a) (Random a)) (Random a))) |