more complete bindings
This commit is contained in:
parent
aa6ec371fb
commit
9bbe24e51b
2 changed files with 107 additions and 26 deletions
|
|
@ -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();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue