packages feed

national-australia-bank 0.0.7 → 0.0.8

raw patch · 3 files changed

+41/−9 lines, 3 files

Files

changelog.md view
@@ -1,3 +1,7 @@+0.0.8++* Add `amountReal`+ 0.0.7  * Add `diffDates`
national-australia-bank.cabal view
@@ -1,5 +1,5 @@ name:                 national-australia-bank-version:              0.0.7+version:              0.0.8 synopsis:             Functions for National Australia Bank transactions description:          Parsing, Processing and other functions for National Australia Bank transactions license:              BSD3
src/Data/Bank/NationalAustraliaBank/NationalAustraliaBank.hs view
@@ -41,7 +41,7 @@ import Data.Validation ( toEither ) import Data.Time ( fromGregorian, toGregorian, diffDays, Day ) import Data.Functor.Contravariant ( Contravariant(contramap) )-import Data.Ratio ( Ratio, (%) )+import Data.Ratio ( Ratio, (%), numerator ) import System.Directory     ( doesDirectoryExist,       listDirectory )@@ -53,7 +53,7 @@       ParsecT,       Stream ) --- #setup+-- $setup -- >>> import Data.Digit  data Month =@@ -458,6 +458,39 @@ realAmount a =   integralAmount100 a % 100 +-- |+--+-- >>> amountReal 0+-- Amount {_negated = False, _dollars = DecDigit0 :| [], _cents1 = DecDigit0, _cents2 = DecDigit0}+--+-- >>> amountReal 0.01+-- Amount {_negated = False, _dollars = DecDigit0 :| [], _cents1 = DecDigit0, _cents2 = DecDigit1}+--+-- >>> amountReal 0.0123+-- Amount {_negated = False, _dollars = DecDigit1 :| [], _cents1 = DecDigit2, _cents2 = DecDigit3}+--+-- >>> amountReal (-0.01)+-- Amount {_negated = True, _dollars = DecDigit0 :| [], _cents1 = DecDigit0, _cents2 = DecDigit1}+--+-- >>> amountReal (-0.0123)+-- Amount {_negated = True, _dollars = DecDigit1 :| [], _cents1 = DecDigit2, _cents2 = DecDigit3}+--+-- >>> amountReal (-12.01)+-- Amount {_negated = True, _dollars = DecDigit1 :| [DecDigit2], _cents1 = DecDigit0, _cents2 = DecDigit1}+--+-- >>> > amountReal (452.99)+-- Amount {_negated = False, _dollars = DecDigit4 :| [DecDigit5,DecDigit2], _cents1 = DecDigit9, _cents2 = DecDigit9}+amountReal ::+  Integral a =>+  Ratio a+  -> Amount+amountReal r =+  let div10 x = over _2 (fromMaybe DecDigit0 . preview integralDecimal) (divMod x 10)+      n = numerator (r * 100)+      (as1, c2) = div10 (abs n)+      (as2, c1) = div10 as1+  in  Amount (n < 0) (either id id (integralDecDigits as2)) c1 c2+ integralAmount100 ::   Integral a =>   Amount@@ -488,12 +521,7 @@ -- Amount {_negated = False, _dollars = DecDigit2 :| [DecDigit2], _cents1 = DecDigit3, _cents2 = DecDigit2} instance Semigroup Amount where   a1 <> a2 =-    let div10 x = over _2 (fromMaybe DecDigit0 . preview integralDecimal) (divMod x 10)-        v :: Integer-        v = integralAmount100 a1 + integralAmount100 a2-        (as1, c2) = div10 (abs v)-        (as2, c1) = div10 as1-    in  Amount (v < 0) (either id id (integralDecDigits as2)) c1 c2+    amountReal (realAmount a1 + realAmount a2 :: Ratio Integer)  instance Monoid Amount where   mempty =