{-# LANGUAGE CPP #-} module JavaScript.Extras.Number ( maxSafeInteger , minSafeInteger , safeIncrement , safeDecrement ) where maxSafeInteger :: Int maxSafeInteger = js_maxSafeInteger minSafeInteger :: Int minSafeInteger = js_minSafeInteger -- | always returns a number between [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER] safeIncrement :: Int -> Int safeIncrement i = if i >= maxSafeInteger then minSafeInteger else i + 1 -- | always returns a number between [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER] safeDecrement :: Int -> Int safeDecrement i = if i <= minSafeInteger then maxSafeInteger else i - 1 #ifdef __GHCJS__ foreign import javascript unsafe "Number.MAX_SAFE_INTEGER" js_maxSafeInteger :: Int foreign import javascript unsafe "Number.MIN_SAFE_INTEGER" js_minSafeInteger :: Int #else js_maxSafeInteger :: Int js_maxSafeInteger = 0 js_minSafeInteger :: Int js_minSafeInteger = 0 #endif