diff --git a/.guix/modules/haskell-tito-package.scm b/.guix/modules/haskell-tito-package.scm index 596e88f..97dea8e 100644 --- a/.guix/modules/haskell-tito-package.scm +++ b/.guix/modules/haskell-tito-package.scm @@ -19,7 +19,8 @@ #:recursive? #t #:select? vcs-file?)) (build-system haskell-build-system) - (inputs (list ghc-megaparsec)) + (inputs (list ghc-megaparsec + ghc-decimal)) (home-page "https://git.olarinmaensamoojat.fi/OMS/tito") (synopsis "TITO parsing library") (description "") diff --git a/src/Data/TITO/Parser.hs b/src/Data/TITO/Parser.hs index e216422..4b36e1d 100644 --- a/src/Data/TITO/Parser.hs +++ b/src/Data/TITO/Parser.hs @@ -9,6 +9,7 @@ import Data.Maybe import Control.Monad import Data.Char (isSpace) +import Data.Decimal (DecimalRaw(Decimal)) import Data.Text (Text) import Data.Void (Void) import Text.Megaparsec ((<|>)) @@ -80,7 +81,7 @@ money = do sign <- P.label "+ or -" $ P.oneOf [43, 45] -- +, - let setSign | sign == 43 = id | sign == 45 = negate - Money . setSign <$> numeric 18 + Money . Decimal 2 . setSign <$> numeric 18 optional :: Int -> Parser a -> Parser (Maybe a) optional n p = P.try (P.count n (P.char 32) *> pure Nothing) <|> (Just <$> p) @@ -133,7 +134,7 @@ accountStatement = do _records <- optional' numeric 6 currency <- optional' alphaNumeric 3 accountName <- optional' alphaNumeric 30 - accountLimit <- fmap Money <$> optional' numeric 18 + accountLimit <- fmap (Money . Decimal 2) <$> optional' numeric 18 accountOwnerName <- alphaNumeric 35 bankName <- alphaNumeric 40 contactInformation <- optional' alphaNumeric 40 diff --git a/src/Data/TITO/Types.hs b/src/Data/TITO/Types.hs index a4fa0e2..2287716 100644 --- a/src/Data/TITO/Types.hs +++ b/src/Data/TITO/Types.hs @@ -7,6 +7,7 @@ import Data.ByteString (ByteString) import Data.Text (Text) import Data.Time (Day, LocalTime) import Data.List.NonEmpty (NonEmpty) +import Data.Decimal (Decimal) data AccountStatement = AccountStatement { account :: Text @@ -28,7 +29,7 @@ data AccountStatement = AccountStatement , events :: [Event] } deriving (Show, Eq) -newtype Money = Money Integer deriving (Eq, Show) +newtype Money = Money Decimal deriving (Eq, Show) data Event = BasicTransaction Transaction -- T10 | TransactionNotification Transaction -- T80 diff --git a/tito.cabal b/tito.cabal index 3495864..36a90b7 100644 --- a/tito.cabal +++ b/tito.cabal @@ -12,6 +12,7 @@ library base, bytestring, containers, + Decimal, megaparsec, text, time