mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-08 07:09:28 +03:00
41 lines
1.4 KiB
Haskell
41 lines
1.4 KiB
Haskell
{-|
|
|
|
|
A 'Commodity' is a symbol representing a currency or some other kind of
|
|
thing we are tracking, and some display preferences that tell how to
|
|
display 'Amount's of the commodity - is the symbol on the left or right,
|
|
are thousands separated by comma, significant decimal places and so on.
|
|
|
|
-}
|
|
module Ledger.Commodity
|
|
where
|
|
import qualified Data.Map as Map
|
|
import Ledger.Utils
|
|
import Ledger.Types
|
|
|
|
|
|
-- convenient amount and commodity constructors, for tests etc.
|
|
|
|
unknown = Commodity {symbol="", side=L,spaced=False,comma=False,precision=0}
|
|
dollar = Commodity {symbol="$", side=L,spaced=False,comma=False,precision=2}
|
|
euro = Commodity {symbol="EUR",side=L,spaced=False,comma=False,precision=2}
|
|
pound = Commodity {symbol="£", side=L,spaced=False,comma=False,precision=2}
|
|
hour = Commodity {symbol="h", side=R,spaced=False,comma=False,precision=1}
|
|
|
|
dollars n = Amount dollar n Nothing
|
|
euros n = Amount euro n Nothing
|
|
pounds n = Amount pound n Nothing
|
|
hours n = Amount hour n Nothing
|
|
|
|
defaultcommodities = [dollar, euro, pound, hour, unknown]
|
|
|
|
-- | Look up one of the hard-coded default commodities. For use in tests.
|
|
comm :: String -> Commodity
|
|
comm sym = fromMaybe
|
|
(error "commodity lookup failed")
|
|
$ find (\(Commodity{symbol=s}) -> s==sym) defaultcommodities
|
|
|
|
-- | Find the conversion rate between two commodities. Currently returns 1.
|
|
conversionRate :: Commodity -> Commodity -> Double
|
|
conversionRate oldc newc = 1
|
|
|