national-australia-bank 0.0.7 → 0.0.8
raw patch · 3 files changed
+41/−9 lines, 3 files
Files
- changelog.md +4/−0
- national-australia-bank.cabal +1/−1
- src/Data/Bank/NationalAustraliaBank/NationalAustraliaBank.hs +36/−8
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 =