From 0102d641f127a8c863dfad62d50e2e95010c8ade Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Sat, 25 Jul 2015 21:54:01 +0100 Subject: [PATCH] Fix overflows in randomInt --- bower.json | 2 +- src/Control/Monad/Eff/Random.purs | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/bower.json b/bower.json index f0acc58..493343c 100644 --- a/bower.json +++ b/bower.json @@ -21,7 +21,7 @@ ], "dependencies": { "purescript-eff": "^0.1.0", - "purescript-integers": "^0.2.0", + "purescript-integers": "^0.2.1", "purescript-math": "^0.2.0" } } diff --git a/src/Control/Monad/Eff/Random.purs b/src/Control/Monad/Eff/Random.purs index f2d94c6..8f7cc1e 100644 --- a/src/Control/Monad/Eff/Random.purs +++ b/src/Control/Monad/Eff/Random.purs @@ -3,9 +3,7 @@ module Control.Monad.Eff.Random where import Prelude import Control.Monad.Eff (Eff()) -import Data.Int (fromNumber, toNumber) - -import qualified Data.Maybe.Unsafe as U +import Data.Int (fromNumber, toNumber, floor) -- | The `RANDOM` effect indicates that an Eff action may access or modify the -- | JavaScript global random number generator, i.e. `Math.random()`. @@ -28,7 +26,8 @@ foreign import random :: forall e. Eff (random :: RANDOM | e) Number randomInt :: forall e. Int -> Int -> Eff (random :: RANDOM | e) Int randomInt low high = do n <- random - pure <<< U.fromJust <<< fromNumber <<< Math.floor $ toNumber (high - low + one) * n + toNumber low + let asNumber = (toNumber high - toNumber low + one) * n + toNumber low + return $ floor asNumber -- | Returns a random number between a minimum value (inclusive) and a maximum -- | value (exclusive). It is unspecified what happens if `maximum < minimum`.