This commit is contained in:
Athan Clark 2018-08-31 20:18:07 -06:00
parent b4b63bf71d
commit 48ca8ccda1
3 changed files with 100 additions and 8 deletions

View file

@ -11,6 +11,7 @@
"purescript-prelude": "^3.1.1",
"purescript-either": "^3.2.0",
"purescript-exceptions": "^3.0.0",
"purescript-tuples-native": "^0.1.0",
"purescript-record": "git@github.com:athanclark/purescript-record.git#850360dbfa1bf765a19b3ec207a706622fa47ac7"
},
"repository": {

View file

@ -2,7 +2,7 @@
var BigNumber = require('bignumber.js');
exports.parseBigNumber = function parseBigNumber (Left,Right,s) {
exports.parseBigNumberImpl = function parseBigNumberImpl (Left,Right,s) {
var x;
try {
x = new BigNumber(s);
@ -16,3 +16,23 @@ exports.parseBigNumber = function parseBigNumber (Left,Right,s) {
exports.configImpl = function configImpl (cfg) {
BigNumber.config(cfg);
};
exports.isBigNumber = function isBigNumber (x) {
return BigNumber.isBigNumber(x);
};
exports.maxBigNumberImpl = function maxBigNumberImpl (x,y) {
return BigNumber.maximum(x,y);
};
exports.minBigNumberImpl = function minBigNumberImpl (x,y) {
return BigNumber.minimum(x,y);
};
exports.randomBigNumber = function randomBigNumber () {
return BigNumber.random();
};

View file

@ -1,9 +1,18 @@
module Data.BigNumber where
module Data.BigNumber
( BIGNUMBER, BigNumber, parseBigNumber, config
, ConfigParams, RoundingMode
, roundUp, roundDown, roundCeil, roundFloor
, roundHalfUp, roundHalfDown, roundHalfEven, roundHalfCeil, roundHalfFloor
, ModuloMode, modRoundUp, modRoundDown, modRoundFloor, modRoundHalfEven
, modEuclid
, isBigNumber, maxBigNumber, minBigNumber, randomBigNumber
) where
import Prelude
import Data.Either (Either)
import Data.Function.Uncurried (Fn3)
import Data.Either (Either (..))
import Data.Function.Uncurried (Fn3, runFn3, Fn2, runFn2)
import Data.Record.Class (class Subrow)
import Data.Tuple.Native (T2)
import Control.Monad.Eff (Eff, kind Effect)
import Control.Monad.Eff.Exception (Error)
import Control.Monad.Eff.Uncurried (EffFn1, runEffFn1)
@ -14,15 +23,77 @@ foreign import data BIGNUMBER :: Effect
foreign import data BigNumber :: Type
foreign import parseBigNumber :: Fn3 (forall e a. e -> Either e a) (forall e a. a -> Either e a) String (Either Error BigNumber)
foreign import parseBigNumberImpl :: Fn3 (forall e a. e -> Either e a) (forall e a. a -> Either e a) String (Either Error BigNumber)
parseBigNumber :: String -> Either Error BigNumber
parseBigNumber = runFn3 parseBigNumberImpl Left Right
foreign import configImpl :: forall o eff. EffFn1 (bigNumber :: BIGNUMBER | eff) o Unit
type ConfigParams =
newtype RoundingMode = RoundingMode Int
roundUp :: RoundingMode
roundUp = RoundingMode 0
roundDown :: RoundingMode
roundDown = RoundingMode 1
roundCeil :: RoundingMode
roundCeil = RoundingMode 2
roundFloor :: RoundingMode
roundFloor = RoundingMode 3
roundHalfUp :: RoundingMode
roundHalfUp = RoundingMode 4
roundHalfDown :: RoundingMode
roundHalfDown = RoundingMode 5
roundHalfEven :: RoundingMode
roundHalfEven = RoundingMode 6
roundHalfCeil :: RoundingMode
roundHalfCeil = RoundingMode 7
roundHalfFloor :: RoundingMode
roundHalfFloor = RoundingMode 8
newtype ModuloMode = ModuloMode Int
modRoundUp :: ModuloMode
modRoundUp = ModuloMode 0
modRoundDown :: ModuloMode
modRoundDown = ModuloMode 1
modRoundFloor :: ModuloMode
modRoundFloor = ModuloMode 3
modRoundHalfEven :: ModuloMode
modRoundHalfEven = ModuloMode 6
modEuclid :: ModuloMode
modEuclid = ModuloMode 9
type ConfigParams format =
( "DECIMAL_PLACES" :: Int
, "ROUNDING_MODE" :: RoundingMode
, "EXPONENTIAL_AT" :: T2 Int Int
, "RANGE" :: T2 Int Int
, "CRYPTO" :: Boolean
, "MODULO_MODE" :: ModuloMode
, "POW_PRECISION" :: Int
, "FORMAT" :: format
, "ALPHABET" :: String
)
config :: forall o eff
. Subrow o ConfigParams
config :: forall o format eff
. Subrow o (ConfigParams format)
=> { | o } -> Eff (bigNumber :: BIGNUMBER | eff) Unit
config = runEffFn1 configImpl
foreign import isBigNumber :: forall a. a -> Boolean
foreign import maxBigNumberImpl :: Fn2 BigNumber BigNumber BigNumber
maxBigNumber :: BigNumber -> BigNumber -> BigNumber
maxBigNumber = runFn2 maxBigNumberImpl
foreign import minBigNumberImpl :: Fn2 BigNumber BigNumber BigNumber
minBigNumber :: BigNumber -> BigNumber -> BigNumber
minBigNumber = runFn2 minBigNumberImpl
foreign import randomBigNumber :: forall eff. Eff (bigNumber :: BIGNUMBER | eff) BigNumber