mirror of
https://github.com/simonmichael/hledger.git
synced 2024-12-28 04:46:31 +03:00
small cleanups
This commit is contained in:
parent
3dc5f54f39
commit
8d70ed87ea
@ -97,17 +97,19 @@ instance Num Amount where
|
||||
-- commodity.)
|
||||
amountop :: (Double -> Double -> Double) -> Amount -> Amount -> Amount
|
||||
amountop op a@(Amount ac aq) b@(Amount bc bq) =
|
||||
Amount bc ((quantity $ toCommodity bc a) `op` bq)
|
||||
Amount bc ((quantity $ convertAmountTo bc a) `op` bq)
|
||||
|
||||
-- | Convert an amount to the specified commodity using the appropriate
|
||||
-- exchange rate.
|
||||
convertAmountTo :: Commodity -> Amount -> Amount
|
||||
convertAmountTo c2 (Amount c1 q) = Amount c2 (q * conversionRate c1 c2)
|
||||
|
||||
-- | Sum a list of amounts. This is still needed because a final zero
|
||||
-- amount will discard the sum's commodity.
|
||||
sumAmounts :: [Amount] -> Amount
|
||||
sumAmounts = sum . filter (not . isZeroAmount)
|
||||
|
||||
toCommodity :: Commodity -> Amount -> Amount
|
||||
toCommodity newc (Amount oldc q) =
|
||||
Amount newc (q * (conversionRate oldc newc))
|
||||
|
||||
nullamt = Amount (comm "") 0
|
||||
|
||||
-- temporary value for partial entries
|
||||
autoamt = Amount (Commodity {symbol="AUTO",side=L,spaced=False,comma=False,precision=0,rate=1}) 0
|
||||
|
@ -1,8 +1,9 @@
|
||||
{-|
|
||||
|
||||
A 'Commodity' is a symbol and a conversion rate relative to the
|
||||
dollar. Commodity symbols are parsed from the ledger file, rates are
|
||||
currently hard-coded.
|
||||
A 'Commodity' is a symbol representing a currency or some other kind of
|
||||
thing we are tracking, and some settings that tell how to display amounts
|
||||
of the commodity. For the moment, commodities also include a hard-coded
|
||||
conversion rate relative to the dollar.
|
||||
|
||||
-}
|
||||
module Ledger.Commodity
|
||||
@ -36,6 +37,7 @@ defaultcommoditiesmap = Map.fromList [(symbol c :: String, c :: Commodity) | c <
|
||||
comm :: String -> Commodity
|
||||
comm symbol = Map.findWithDefault (error "commodity lookup failed") symbol defaultcommoditiesmap
|
||||
|
||||
-- | Find the conversion rate between two commodities.
|
||||
conversionRate :: Commodity -> Commodity -> Double
|
||||
conversionRate oldc newc = (rate newc) / (rate oldc)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user