safe-decimal-0.1.0.0: Safe and very efficient arithmetic operations on fixed decimal point numbers

Safe HaskellNone
LanguageHaskell2010

Numeric.Decimal

Contents

Synopsis

Documentation

type Decimal64 s = Decimal RoundHalfUp s Int64 Source #

Most common Decimal type backed by Int64 and standard rounding

data RoundHalfUp Source #

Instances
Round RoundHalfUp Source # 
Instance details

Defined in Numeric.Decimal

data RoundFloor Source #

Instances
Round RoundFloor Source # 
Instance details

Defined in Numeric.Decimal

data Truncate Source #

Instances
Round Truncate Source # 
Instance details

Defined in Numeric.Decimal

Methods

roundDecimal :: (Integral p, KnownNat k) => Decimal Truncate (n + k) p -> Decimal Truncate n p Source #

newtype Decimal r (s :: Nat) p Source #

Decimal number with custom precision (p) and type level scaling (s) parameter (i.e. number of digits after the decimal point). As well as the rounding (r) strategy to use

Constructors

Decimal p 
Instances
(MonadThrow m, Round r, KnownNat s) => Fractional (m (Decimal r s Word64)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(/) :: m (Decimal r s Word64) -> m (Decimal r s Word64) -> m (Decimal r s Word64) #

recip :: m (Decimal r s Word64) -> m (Decimal r s Word64) #

fromRational :: Rational -> m (Decimal r s Word64) #

(MonadThrow m, Round r, KnownNat s) => Fractional (m (Decimal r s Word32)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(/) :: m (Decimal r s Word32) -> m (Decimal r s Word32) -> m (Decimal r s Word32) #

recip :: m (Decimal r s Word32) -> m (Decimal r s Word32) #

fromRational :: Rational -> m (Decimal r s Word32) #

(MonadThrow m, Round r, KnownNat s) => Fractional (m (Decimal r s Word16)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(/) :: m (Decimal r s Word16) -> m (Decimal r s Word16) -> m (Decimal r s Word16) #

recip :: m (Decimal r s Word16) -> m (Decimal r s Word16) #

fromRational :: Rational -> m (Decimal r s Word16) #

(MonadThrow m, Round r, KnownNat s) => Fractional (m (Decimal r s Word8)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(/) :: m (Decimal r s Word8) -> m (Decimal r s Word8) -> m (Decimal r s Word8) #

recip :: m (Decimal r s Word8) -> m (Decimal r s Word8) #

fromRational :: Rational -> m (Decimal r s Word8) #

(MonadThrow m, Round r, KnownNat s) => Fractional (m (Decimal r s Word)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(/) :: m (Decimal r s Word) -> m (Decimal r s Word) -> m (Decimal r s Word) #

recip :: m (Decimal r s Word) -> m (Decimal r s Word) #

fromRational :: Rational -> m (Decimal r s Word) #

(MonadThrow m, Round r, KnownNat s) => Fractional (m (Decimal r s Int64)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(/) :: m (Decimal r s Int64) -> m (Decimal r s Int64) -> m (Decimal r s Int64) #

recip :: m (Decimal r s Int64) -> m (Decimal r s Int64) #

fromRational :: Rational -> m (Decimal r s Int64) #

(MonadThrow m, Round r, KnownNat s) => Fractional (m (Decimal r s Int32)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(/) :: m (Decimal r s Int32) -> m (Decimal r s Int32) -> m (Decimal r s Int32) #

recip :: m (Decimal r s Int32) -> m (Decimal r s Int32) #

fromRational :: Rational -> m (Decimal r s Int32) #

(MonadThrow m, Round r, KnownNat s) => Fractional (m (Decimal r s Int16)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(/) :: m (Decimal r s Int16) -> m (Decimal r s Int16) -> m (Decimal r s Int16) #

recip :: m (Decimal r s Int16) -> m (Decimal r s Int16) #

fromRational :: Rational -> m (Decimal r s Int16) #

(MonadThrow m, Round r, KnownNat s) => Fractional (m (Decimal r s Int8)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(/) :: m (Decimal r s Int8) -> m (Decimal r s Int8) -> m (Decimal r s Int8) #

recip :: m (Decimal r s Int8) -> m (Decimal r s Int8) #

fromRational :: Rational -> m (Decimal r s Int8) #

(MonadThrow m, Round r, KnownNat s) => Fractional (m (Decimal r s Int)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(/) :: m (Decimal r s Int) -> m (Decimal r s Int) -> m (Decimal r s Int) #

recip :: m (Decimal r s Int) -> m (Decimal r s Int) #

fromRational :: Rational -> m (Decimal r s Int) #

(MonadThrow m, Round r, KnownNat s) => Fractional (m (Decimal r s Integer)) Source #

The order of fractional and negation for literals prevents rational numbers to be negative in fromRational function, which can cause some issues in rounding:

>>> fromRational (-23.5) :: Either SomeException (Decimal RoundHalfUp 0 Integer)
Right -23
>>> -23.5 :: Either SomeException (Decimal RoundHalfUp 0 Integer)
Right -24
Instance details

Defined in Numeric.Decimal.Internal

Methods

(/) :: m (Decimal r s Integer) -> m (Decimal r s Integer) -> m (Decimal r s Integer) #

recip :: m (Decimal r s Integer) -> m (Decimal r s Integer) #

fromRational :: Rational -> m (Decimal r s Integer) #

(MonadThrow m, Round r, KnownNat s) => Num (m (Decimal r s Word64)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(+) :: m (Decimal r s Word64) -> m (Decimal r s Word64) -> m (Decimal r s Word64) #

(-) :: m (Decimal r s Word64) -> m (Decimal r s Word64) -> m (Decimal r s Word64) #

(*) :: m (Decimal r s Word64) -> m (Decimal r s Word64) -> m (Decimal r s Word64) #

negate :: m (Decimal r s Word64) -> m (Decimal r s Word64) #

abs :: m (Decimal r s Word64) -> m (Decimal r s Word64) #

signum :: m (Decimal r s Word64) -> m (Decimal r s Word64) #

fromInteger :: Integer -> m (Decimal r s Word64) #

(MonadThrow m, Round r, KnownNat s) => Num (m (Decimal r s Word32)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(+) :: m (Decimal r s Word32) -> m (Decimal r s Word32) -> m (Decimal r s Word32) #

(-) :: m (Decimal r s Word32) -> m (Decimal r s Word32) -> m (Decimal r s Word32) #

(*) :: m (Decimal r s Word32) -> m (Decimal r s Word32) -> m (Decimal r s Word32) #

negate :: m (Decimal r s Word32) -> m (Decimal r s Word32) #

abs :: m (Decimal r s Word32) -> m (Decimal r s Word32) #

signum :: m (Decimal r s Word32) -> m (Decimal r s Word32) #

fromInteger :: Integer -> m (Decimal r s Word32) #

(MonadThrow m, Round r, KnownNat s) => Num (m (Decimal r s Word16)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(+) :: m (Decimal r s Word16) -> m (Decimal r s Word16) -> m (Decimal r s Word16) #

(-) :: m (Decimal r s Word16) -> m (Decimal r s Word16) -> m (Decimal r s Word16) #

(*) :: m (Decimal r s Word16) -> m (Decimal r s Word16) -> m (Decimal r s Word16) #

negate :: m (Decimal r s Word16) -> m (Decimal r s Word16) #

abs :: m (Decimal r s Word16) -> m (Decimal r s Word16) #

signum :: m (Decimal r s Word16) -> m (Decimal r s Word16) #

fromInteger :: Integer -> m (Decimal r s Word16) #

(MonadThrow m, Round r, KnownNat s) => Num (m (Decimal r s Word8)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(+) :: m (Decimal r s Word8) -> m (Decimal r s Word8) -> m (Decimal r s Word8) #

(-) :: m (Decimal r s Word8) -> m (Decimal r s Word8) -> m (Decimal r s Word8) #

(*) :: m (Decimal r s Word8) -> m (Decimal r s Word8) -> m (Decimal r s Word8) #

negate :: m (Decimal r s Word8) -> m (Decimal r s Word8) #

abs :: m (Decimal r s Word8) -> m (Decimal r s Word8) #

signum :: m (Decimal r s Word8) -> m (Decimal r s Word8) #

fromInteger :: Integer -> m (Decimal r s Word8) #

(MonadThrow m, Round r, KnownNat s) => Num (m (Decimal r s Word)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(+) :: m (Decimal r s Word) -> m (Decimal r s Word) -> m (Decimal r s Word) #

(-) :: m (Decimal r s Word) -> m (Decimal r s Word) -> m (Decimal r s Word) #

(*) :: m (Decimal r s Word) -> m (Decimal r s Word) -> m (Decimal r s Word) #

negate :: m (Decimal r s Word) -> m (Decimal r s Word) #

abs :: m (Decimal r s Word) -> m (Decimal r s Word) #

signum :: m (Decimal r s Word) -> m (Decimal r s Word) #

fromInteger :: Integer -> m (Decimal r s Word) #

(MonadThrow m, Round r, KnownNat s) => Num (m (Decimal r s Int64)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(+) :: m (Decimal r s Int64) -> m (Decimal r s Int64) -> m (Decimal r s Int64) #

(-) :: m (Decimal r s Int64) -> m (Decimal r s Int64) -> m (Decimal r s Int64) #

(*) :: m (Decimal r s Int64) -> m (Decimal r s Int64) -> m (Decimal r s Int64) #

negate :: m (Decimal r s Int64) -> m (Decimal r s Int64) #

abs :: m (Decimal r s Int64) -> m (Decimal r s Int64) #

signum :: m (Decimal r s Int64) -> m (Decimal r s Int64) #

fromInteger :: Integer -> m (Decimal r s Int64) #

(MonadThrow m, Round r, KnownNat s) => Num (m (Decimal r s Int32)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(+) :: m (Decimal r s Int32) -> m (Decimal r s Int32) -> m (Decimal r s Int32) #

(-) :: m (Decimal r s Int32) -> m (Decimal r s Int32) -> m (Decimal r s Int32) #

(*) :: m (Decimal r s Int32) -> m (Decimal r s Int32) -> m (Decimal r s Int32) #

negate :: m (Decimal r s Int32) -> m (Decimal r s Int32) #

abs :: m (Decimal r s Int32) -> m (Decimal r s Int32) #

signum :: m (Decimal r s Int32) -> m (Decimal r s Int32) #

fromInteger :: Integer -> m (Decimal r s Int32) #

(MonadThrow m, Round r, KnownNat s) => Num (m (Decimal r s Int16)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(+) :: m (Decimal r s Int16) -> m (Decimal r s Int16) -> m (Decimal r s Int16) #

(-) :: m (Decimal r s Int16) -> m (Decimal r s Int16) -> m (Decimal r s Int16) #

(*) :: m (Decimal r s Int16) -> m (Decimal r s Int16) -> m (Decimal r s Int16) #

negate :: m (Decimal r s Int16) -> m (Decimal r s Int16) #

abs :: m (Decimal r s Int16) -> m (Decimal r s Int16) #

signum :: m (Decimal r s Int16) -> m (Decimal r s Int16) #

fromInteger :: Integer -> m (Decimal r s Int16) #

(MonadThrow m, Round r, KnownNat s) => Num (m (Decimal r s Int8)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(+) :: m (Decimal r s Int8) -> m (Decimal r s Int8) -> m (Decimal r s Int8) #

(-) :: m (Decimal r s Int8) -> m (Decimal r s Int8) -> m (Decimal r s Int8) #

(*) :: m (Decimal r s Int8) -> m (Decimal r s Int8) -> m (Decimal r s Int8) #

negate :: m (Decimal r s Int8) -> m (Decimal r s Int8) #

abs :: m (Decimal r s Int8) -> m (Decimal r s Int8) #

signum :: m (Decimal r s Int8) -> m (Decimal r s Int8) #

fromInteger :: Integer -> m (Decimal r s Int8) #

(MonadThrow m, Round r, KnownNat s) => Num (m (Decimal r s Int)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(+) :: m (Decimal r s Int) -> m (Decimal r s Int) -> m (Decimal r s Int) #

(-) :: m (Decimal r s Int) -> m (Decimal r s Int) -> m (Decimal r s Int) #

(*) :: m (Decimal r s Int) -> m (Decimal r s Int) -> m (Decimal r s Int) #

negate :: m (Decimal r s Int) -> m (Decimal r s Int) #

abs :: m (Decimal r s Int) -> m (Decimal r s Int) #

signum :: m (Decimal r s Int) -> m (Decimal r s Int) #

fromInteger :: Integer -> m (Decimal r s Int) #

(MonadThrow m, Round r, KnownNat s) => Num (m (Decimal r s Integer)) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(+) :: m (Decimal r s Integer) -> m (Decimal r s Integer) -> m (Decimal r s Integer) #

(-) :: m (Decimal r s Integer) -> m (Decimal r s Integer) -> m (Decimal r s Integer) #

(*) :: m (Decimal r s Integer) -> m (Decimal r s Integer) -> m (Decimal r s Integer) #

negate :: m (Decimal r s Integer) -> m (Decimal r s Integer) #

abs :: m (Decimal r s Integer) -> m (Decimal r s Integer) #

signum :: m (Decimal r s Integer) -> m (Decimal r s Integer) #

fromInteger :: Integer -> m (Decimal r s Integer) #

Functor (Decimal r s) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

fmap :: (a -> b) -> Decimal r s a -> Decimal r s b #

(<$) :: a -> Decimal r s b -> Decimal r s a #

Applicative (Decimal r s) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

pure :: a -> Decimal r s a #

(<*>) :: Decimal r s (a -> b) -> Decimal r s a -> Decimal r s b #

liftA2 :: (a -> b -> c) -> Decimal r s a -> Decimal r s b -> Decimal r s c #

(*>) :: Decimal r s a -> Decimal r s b -> Decimal r s b #

(<*) :: Decimal r s a -> Decimal r s b -> Decimal r s a #

Bounded p => Bounded (Decimal r s p) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

minBound :: Decimal r s p #

maxBound :: Decimal r s p #

Enum p => Enum (Decimal r s p) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

succ :: Decimal r s p -> Decimal r s p #

pred :: Decimal r s p -> Decimal r s p #

toEnum :: Int -> Decimal r s p #

fromEnum :: Decimal r s p -> Int #

enumFrom :: Decimal r s p -> [Decimal r s p] #

enumFromThen :: Decimal r s p -> Decimal r s p -> [Decimal r s p] #

enumFromTo :: Decimal r s p -> Decimal r s p -> [Decimal r s p] #

enumFromThenTo :: Decimal r s p -> Decimal r s p -> Decimal r s p -> [Decimal r s p] #

Eq p => Eq (Decimal r s p) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

(==) :: Decimal r s p -> Decimal r s p -> Bool #

(/=) :: Decimal r s p -> Decimal r s p -> Bool #

(Round r, KnownNat s) => Num (Decimal r s Integer) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Ord p => Ord (Decimal r s p) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

compare :: Decimal r s p -> Decimal r s p -> Ordering #

(<) :: Decimal r s p -> Decimal r s p -> Bool #

(<=) :: Decimal r s p -> Decimal r s p -> Bool #

(>) :: Decimal r s p -> Decimal r s p -> Bool #

(>=) :: Decimal r s p -> Decimal r s p -> Bool #

max :: Decimal r s p -> Decimal r s p -> Decimal r s p #

min :: Decimal r s p -> Decimal r s p -> Decimal r s p #

(Round r, KnownNat s) => Real (Decimal r s Integer) Source # 
Instance details

Defined in Numeric.Decimal.Internal

(Integral p, KnownNat s) => Show (Decimal r s p) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

showsPrec :: Int -> Decimal r s p -> ShowS #

show :: Decimal r s p -> String #

showList :: [Decimal r s p] -> ShowS #

Generic (Decimal r s p) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Associated Types

type Rep (Decimal r s p) :: Type -> Type #

Methods

from :: Decimal r s p -> Rep (Decimal r s p) x #

to :: Rep (Decimal r s p) x -> Decimal r s p #

NFData p => NFData (Decimal r s p) Source # 
Instance details

Defined in Numeric.Decimal.Internal

Methods

rnf :: Decimal r s p -> () #

type Rep (Decimal r s p) Source # 
Instance details

Defined in Numeric.Decimal.Internal

type Rep (Decimal r s p) = D1 (MetaData "Decimal" "Numeric.Decimal.Internal" "safe-decimal-0.1.0.0-oIsiNAXNW81ubB3RebWUC" True) (C1 (MetaCons "Decimal" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 p)))

class Round r where Source #

Methods

roundDecimal :: (Integral p, KnownNat k) => Decimal r (n + k) p -> Decimal r n p Source #

Instances
Round Truncate Source # 
Instance details

Defined in Numeric.Decimal

Methods

roundDecimal :: (Integral p, KnownNat k) => Decimal Truncate (n + k) p -> Decimal Truncate n p Source #

Round RoundFloor Source # 
Instance details

Defined in Numeric.Decimal

Round RoundHalfUp Source # 
Instance details

Defined in Numeric.Decimal

wrapDecimal :: Integral p => p -> Decimal r s p Source #

Wrap an Integral as a Decimal. No scaling will be done.

unwrapDecimal :: Decimal r s p -> p Source #

Get out the underlying representation for the decimal number. No scaling will be done.

splitDecimal :: (Integral p, KnownNat s) => Decimal r s p -> (p, p) Source #

Split the number at the decimal point, i.e. whole number and the fraction

getScale :: forall r s p. KnownNat s => Decimal r s p -> Int Source #

Get the scale of the Decimal. Argument is not evaluated.

fromNum :: forall r s p. (Num p, KnownNat s) => p -> Decimal r s p Source #

This operation is susceptible to overflows, since it performs the scaling.

parseDecimalBounded :: forall r s p. (KnownNat s, Bounded p, Integral p) => Bool -> String -> Either String (Decimal r s p) Source #

Algebra

plusDecimal :: (MonadThrow m, Eq p, Ord p, Num p, Bounded p) => Decimal r s p -> Decimal r s p -> m (Decimal r s p) Source #

Add two decimal numbers.

minusDecimal :: (MonadThrow m, Eq p, Ord p, Num p, Bounded p) => Decimal r s p -> Decimal r s p -> m (Decimal r s p) Source #

Subtract two decimal numbers.

timesDecimal :: Decimal r s1 Integer -> Decimal r s2 Integer -> Decimal r (s1 + s2) Integer Source #

Multiply two bounded decimal numbers, adjusting their scale at the type level as well.

signumDecimal :: (Num p, KnownNat s) => Decimal r s p -> Decimal r s p Source #

Compute signum of a decimal, always one of 1, 0 or -1

timesDecimalBounded :: (MonadThrow m, Integral p, Bounded p) => Decimal r s1 p -> Decimal r s2 p -> m (Decimal r (s1 + s2) p) Source #

Multiply two bounded decimal numbers, adjusting their scale at the type level as well.

timesDecimalRounded :: (MonadThrow m, KnownNat s, Round r, Integral p, Bounded p) => Decimal r s p -> Decimal r s p -> m (Decimal r s p) Source #

Multiply two decimal numbers, while rounding the result according to the rounding strategy.

divideDecimal :: (MonadThrow m, Fractional (m (Decimal r s p)), Integral p, Integral p) => Decimal r s p -> Decimal r s p -> m (Decimal r s p) Source #

quotRemBounded :: (MonadThrow m, Integral a, Bounded a) => a -> a -> m (a, a) Source #

Divide two decimal numbers while checking for Overflow and DivideByZero

quotRemDecimalBounded :: forall m r s p. (MonadThrow m, Integral p, Bounded p) => Decimal r s p -> Integer -> m (Decimal r s p, Decimal r s p) Source #

fromIntegerDecimalBounded :: forall m r s p. (MonadThrow m, Integral p, Bounded p) => Decimal r s Integer -> m (Decimal r s p) Source #

fromRationalDecimalRounded :: forall m r s p. (MonadThrow m, KnownNat s, Round r, Integral p) => Rational -> m (Decimal r s p) Source #

liftDecimal :: (p1 -> p2) -> Decimal r s p1 -> Decimal r s p2 Source #

liftDecimal2 :: (p1 -> p2 -> p3) -> Decimal r s p1 -> Decimal r s p2 -> Decimal r s p3 Source #

bindM2Decimal :: Monad m => (p1 -> p2 -> m p) -> m (Decimal r1 s1 p1) -> m (Decimal r2 s2 p2) -> m (Decimal r s p) Source #

bindM2 :: Monad m => (a -> b -> m c) -> m a -> m b -> m c Source #

Bounded

plusBounded :: (MonadThrow m, Eq a, Ord a, Num a, Bounded a) => a -> a -> m a Source #

Add two bounded numbers while checking for Overflow/Underflow

minusBounded :: (MonadThrow m, Eq a, Ord a, Num a, Bounded a) => a -> a -> m a Source #

Subtract two bounded numbers while checking for Overflow/Underflow

timesBounded :: (MonadThrow m, Integral a, Bounded a) => a -> a -> m a Source #

Multiply two decimal numbers while checking for Overflow

fromIntegerBounded :: forall m a. (MonadThrow m, Integral a, Bounded a) => Integer -> m a Source #

fromIntegerScaleBounded :: forall m a s. (MonadThrow m, Integral a, Bounded a, KnownNat s) => Proxy s -> Integer -> m a Source #

divBounded :: (MonadThrow m, Integral a, Bounded a) => a -> a -> m a Source #

Divide two decimal numbers while checking for Overflow and DivideByZero

quotBounded :: (MonadThrow m, Integral a, Bounded a) => a -> a -> m a Source #

Divide two decimal numbers while checking for Overflow and DivideByZero

Operations

decimalList :: Integral p => [p] -> [Decimal r s p] Source #

O(1) - Conversion of a list.

Note: It doesn't do any scaling, eg:

>>> decimalList [1,20,300] :: [Decimal RoundHalfUp 2 Int]
[0.01,0.20,3.00]

If scaling is what you need use fromIntegral instead:

>>> mapM fromIntegral ([1,20,300] :: [Int]) :: Either SomeException [Decimal RoundHalfUp 2 Int]
Right [1.00,20.00,300.00]

sumDecimal :: (MonadThrow m, Foldable f, Eq p, Ord p, Num p, Bounded p) => f (Decimal r s p) -> m (Decimal r s p) Source #

Sum a list of decimal numbers

productDecimal :: (MonadThrow m, Foldable f, KnownNat s, Round r, Integral p, Bounded p) => f (Decimal r s p) -> m (Decimal r s p) Source #

Multiply all decimal numbers in the list while doing rounding.

Conversion

toScientific :: (Integral p, KnownNat s) => Decimal r s p -> Scientific Source #

Convert Decimal to Scientific

fromScientific :: forall m r s. (MonadThrow m, KnownNat s) => Scientific -> m (Decimal r s Integer) Source #

Convert Scientific to Decimal without loss of precision. Will return Left Underflow if Scientific has too many decimal places, more than Decimal scaling is capable to handle.

fromScientificBounded :: forall m r s p. (MonadThrow m, Integral p, Bounded p, KnownNat s) => Scientific -> m (Decimal r s p) Source #

Convert from Scientific to Decimal while checking for Overflow/Underflow