more complete bindings

This commit is contained in:
Athan Clark 2018-09-01 09:46:32 -06:00
parent aa6ec371fb
commit 9bbe24e51b
2 changed files with 107 additions and 26 deletions

View file

@ -28,7 +28,7 @@ exports.randomBigNumber = function randomBigNumber () {
};
exports.absBigNumber = function absBigNumber (x) {
exports.absImpl = function absImpl (x) {
return x.abs();
};
@ -45,6 +45,10 @@ exports.compareBigNumberImpl = function compareBigNumberImpl (LT,EQ,GT,x,y) {
};
exports.decimalPlacesImpl = function decimalPlacesImpl (x,y) {
return x.decimalPlaces(y);
};
exports.divBigNumberImpl = function divBigNumberImpl (x,y) {
return x.div(y);
};
@ -117,7 +121,7 @@ exports.timesBigNumberImpl = function timesBigNumberImpl (x,y) {
return x.times(y);
};
exports.negateBigNumber = function negateBigNumber (x) {
exports.negateImpl = function negateImpl (x) {
return x.negated();
};
@ -125,10 +129,14 @@ exports.plusBigNumberImpl = function plusBigNumberImpl (x,y) {
return x.plus(y);
};
exports.precisionBigNumberImpl = function precisionBigNumberImpl (x,y) {
exports.precisionImpl = function precisionImpl (x,y) {
return x.precision(y);
};
exports.shiftedByImpl = function shiftedByImpl (x,y) {
return x.shiftedBy(y);
};
exports.toNumber = function toNumber (x) {
return x.toNumber();
};
@ -137,6 +145,26 @@ exports.toString = function toString (x) {
return x.toString();
};
exports.toExponential = function toExponential (x) {
return x.toExponential();
};
exports.toFixed = function toFixed (x) {
return x.toFixed();
};
exports.toFormat = function toFormat (x) {
return x.toFormat();
};
exports.toFractionImpl = function toFractionImpl (x) {
return x.toFraction();
};
exports.valueOf = function valueOf (x) {
return x.valueOf();
};
exports.sqrt = function sqrt (x) {
return x.sqrt();
};

View file

@ -5,15 +5,20 @@ module Data.BigNumber
, roundHalfUp, roundHalfDown, roundHalfEven, roundHalfCeil, roundHalfFloor
, ModuloMode, modRoundUp, modRoundDown, modRoundFloor, modRoundHalfEven
, modEuclid
, isBigNumber, randomBigNumber
, isBigNumber, isInteger, isFinite, isNaN, isNegative, isPositive, isZero
, toNumber, toString, toExponential, toFixed, toFormat, toFraction, valueOf
, abs', negate', idiv, sqrt, pow
, intValue, precision, decimalPlaces, shiftedBy, randomBigNumber
) where
import Prelude
import Data.Int as Int
import Data.Either (Either (..))
import Data.Tuple (Tuple (..))
import Data.Function.Uncurried (Fn3, runFn3, Fn2, runFn2, Fn5, runFn5)
import Data.Record.Class (class Subrow)
import Data.Tuple.Native (T2)
import Data.Tuple.Native (T2, prj)
import Data.Typelevel.Num.Reps (d0, d1)
-- import Data.Semiring (class Semiring)
import Control.Monad.Eff (Eff, kind Effect)
import Control.Monad.Eff.Exception (Error)
@ -69,6 +74,16 @@ modEuclid :: ModuloMode
modEuclid = ModuloMode 9
type FormatParams =
( decimalSeparator :: String
, groupSeparator :: String
, groupSize :: Int
, secondaryGroupSize :: Int
, fractionGroupSeparator :: String
, fractionGroupSize :: Int
)
type ConfigParams format =
( "DECIMAL_PLACES" :: Int
, "ROUNDING_MODE" :: RoundingMode
@ -82,39 +97,77 @@ type ConfigParams format =
)
config :: forall o format eff
. Subrow o (ConfigParams format)
. Subrow o (ConfigParams { | format })
=> Subrow format FormatParams
=> { | o } -> Eff (bigNumber :: BIGNUMBER | eff) Unit
config = runEffFn1 configImpl
foreign import isBigNumber :: forall a. a -> Boolean
foreign import randomBigNumber :: forall eff. Eff (bigNumber :: BIGNUMBER | eff) BigNumber
foreign import compareBigNumberImpl :: Fn5 Ordering Ordering Ordering BigNumber BigNumber Ordering
foreign import absBigNumber :: BigNumber -> BigNumber
foreign import divBigNumberImpl :: Fn2 BigNumber BigNumber BigNumber
foreign import idivBigNumberImpl :: Fn2 BigNumber BigNumber BigNumber
foreign import powBigNumberImpl :: Fn2 BigNumber BigNumber BigNumber
foreign import intValue :: BigNumber -> BigNumber
foreign import eqBigNumberImpl :: Fn2 BigNumber BigNumber Boolean
foreign import isFinite :: BigNumber -> Boolean
foreign import gtBigNumberImpl :: Fn2 BigNumber BigNumber Boolean
foreign import gteBigNumberImpl :: Fn2 BigNumber BigNumber Boolean
foreign import isInteger :: BigNumber -> Boolean
foreign import ltBigNumberImpl :: Fn2 BigNumber BigNumber Boolean
foreign import lteBigNumberImpl :: Fn2 BigNumber BigNumber Boolean
foreign import isFinite :: BigNumber -> Boolean
foreign import isNaN :: BigNumber -> Boolean
foreign import isNegative :: BigNumber -> Boolean
foreign import isPositive :: BigNumber -> Boolean
foreign import isZero :: BigNumber -> Boolean
foreign import plusBigNumberImpl :: Fn2 BigNumber BigNumber BigNumber
foreign import minusBigNumberImpl :: Fn2 BigNumber BigNumber BigNumber
foreign import moduloBigNumberImpl :: Fn2 BigNumber BigNumber BigNumber
foreign import timesBigNumberImpl :: Fn2 BigNumber BigNumber BigNumber
foreign import negateBigNumber :: BigNumber -> BigNumber
foreign import precisionBigNumberImpl :: Fn2 BigNumber Int BigNumber
foreign import toNumber :: BigNumber -> Number
foreign import toString :: BigNumber -> String
foreign import toExponential :: BigNumber -> String
foreign import toFixed :: BigNumber -> String
foreign import toFormat :: BigNumber -> String
foreign import toFractionImpl :: Fn2 BigNumber BigNumber (T2 String String)
foreign import valueOf :: BigNumber -> String
toFraction :: BigNumber -> BigNumber -> Tuple String String
toFraction a b =
let x = runFn2 toFractionImpl a b
in Tuple (prj d0 x) (prj d1 x)
foreign import eqBigNumberImpl :: Fn2 BigNumber BigNumber Boolean
foreign import gtBigNumberImpl :: Fn2 BigNumber BigNumber Boolean
foreign import gteBigNumberImpl :: Fn2 BigNumber BigNumber Boolean
foreign import ltBigNumberImpl :: Fn2 BigNumber BigNumber Boolean
foreign import lteBigNumberImpl :: Fn2 BigNumber BigNumber Boolean
foreign import compareBigNumberImpl :: Fn5 Ordering Ordering Ordering BigNumber BigNumber Ordering
foreign import absImpl :: BigNumber -> BigNumber
foreign import plusBigNumberImpl :: Fn2 BigNumber BigNumber BigNumber
foreign import minusBigNumberImpl :: Fn2 BigNumber BigNumber BigNumber
foreign import negateImpl :: BigNumber -> BigNumber
foreign import timesBigNumberImpl :: Fn2 BigNumber BigNumber BigNumber
foreign import divBigNumberImpl :: Fn2 BigNumber BigNumber BigNumber
foreign import idivBigNumberImpl :: Fn2 BigNumber BigNumber BigNumber
foreign import moduloBigNumberImpl :: Fn2 BigNumber BigNumber BigNumber
foreign import sqrt :: BigNumber -> BigNumber
foreign import powBigNumberImpl :: Fn2 BigNumber BigNumber BigNumber
abs' :: BigNumber -> BigNumber
abs' = absImpl
negate' :: BigNumber -> BigNumber
negate' = negateImpl
idiv :: BigNumber -> BigNumber -> BigNumber
idiv = runFn2 idivBigNumberImpl
pow :: BigNumber -> BigNumber -> BigNumber
pow = runFn2 powBigNumberImpl
foreign import intValue :: BigNumber -> BigNumber
foreign import precisionImpl :: Fn2 BigNumber Int BigNumber
foreign import decimalPlacesImpl :: Fn2 BigNumber Int BigNumber
foreign import randomBigNumber :: forall eff. Eff (bigNumber :: BIGNUMBER | eff) BigNumber
foreign import shiftedByImpl :: Fn2 BigNumber Int BigNumber
precision :: BigNumber -> Int -> BigNumber
precision = runFn2 precisionImpl
decimalPlaces :: BigNumber -> Int -> BigNumber
decimalPlaces = runFn2 decimalPlacesImpl
shiftedBy :: BigNumber -> Int -> BigNumber
shiftedBy = runFn2 shiftedByImpl
instance eqBigNumber :: Eq BigNumber where
@ -143,7 +196,7 @@ instance divisionRingBigNumber :: DivisionRing BigNumber where
recip = runFn2 divBigNumberImpl one
instance euclideanRingBigNumber :: EuclideanRing BigNumber where
degree = Int.floor <<< toNumber <<< intValue <<< absBigNumber
degree = Int.floor <<< toNumber <<< intValue <<< abs'
div = runFn2 divBigNumberImpl
mod = runFn2 moduloBigNumberImpl