mapping function over journal amounts
This commit is contained in:
parent
573eda15e6
commit
f47df67167
@ -32,6 +32,8 @@ module Hledger.Data.Journal (
|
||||
journalAccountNamesUsed,
|
||||
-- journalAmountAndPriceCommodities,
|
||||
journalAmounts,
|
||||
overJournalAmounts,
|
||||
traverseJournalAmounts,
|
||||
-- journalCanonicalCommodities,
|
||||
journalDateSpan,
|
||||
journalDescriptions,
|
||||
@ -62,12 +64,14 @@ module Hledger.Data.Journal (
|
||||
tests_Hledger_Data_Journal,
|
||||
)
|
||||
where
|
||||
import Control.Applicative (Const(..))
|
||||
import Control.Arrow
|
||||
import Control.Monad
|
||||
import Control.Monad.Except
|
||||
import qualified Control.Monad.Reader as R
|
||||
import Control.Monad.ST
|
||||
import Data.Array.ST
|
||||
import Data.Functor.Identity (Identity(..))
|
||||
import qualified Data.HashTable.ST.Cuckoo as HT
|
||||
import Data.List
|
||||
-- import Data.Map (findWithDefault)
|
||||
@ -826,12 +830,28 @@ journalConvertAmountsToCost j@Journal{jtxns=ts} = j{jtxns=map fixtransaction ts}
|
||||
-- Amounts in posting prices are not used for canonicalisation.
|
||||
--
|
||||
journalAmounts :: Journal -> [Amount]
|
||||
journalAmounts j =
|
||||
concat
|
||||
[map mpamount $ jmarketprices j
|
||||
,concatMap flatten $ map pamount $ journalPostings j
|
||||
]
|
||||
where flatten (Mixed as) = as
|
||||
journalAmounts = getConst . traverseJournalAmounts (Const . (:[]))
|
||||
|
||||
-- | Maps over all of the amounts in the journal
|
||||
overJournalAmounts :: (Amount -> Amount) -> Journal -> Journal
|
||||
overJournalAmounts f = runIdentity . traverseJournalAmounts (Identity . f)
|
||||
|
||||
-- | Traverses over all ofthe amounts in the journal, in the order
|
||||
-- indicated by 'journalAmounts'.
|
||||
traverseJournalAmounts
|
||||
:: Applicative f
|
||||
=> (Amount -> f Amount)
|
||||
-> Journal -> f Journal
|
||||
traverseJournalAmounts f j =
|
||||
recombine <$> (traverse . mpa) f (jmarketprices j)
|
||||
<*> (traverse . tp . traverse . pamt . maa . traverse) f (jtxns j)
|
||||
where
|
||||
recombine mps txns = j { jmarketprices = mps, jtxns = txns }
|
||||
-- a bunch of traversals
|
||||
mpa g mp = (\amt -> mp { mpamount = amt }) <$> g (mpamount mp)
|
||||
tp g t = (\ps -> t { tpostings = ps }) <$> g (tpostings t)
|
||||
pamt g p = (\amt -> p { pamount = amt }) <$> g (pamount p)
|
||||
maa g (Mixed as) = Mixed <$> g as
|
||||
|
||||
-- | The fully specified date span enclosing the dates (primary or secondary)
|
||||
-- of all this journal's transactions and postings, or DateSpan Nothing Nothing
|
||||
|
||||
@ -19,6 +19,7 @@ module Hledger.Reports.BalanceReport (
|
||||
balanceReport,
|
||||
balanceReportValue,
|
||||
mixedAmountValue,
|
||||
amountValue,
|
||||
flatShowsExclusiveBalance,
|
||||
|
||||
-- * Tests
|
||||
|
||||
Loading…
Reference in New Issue
Block a user