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