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