begin optimization
This commit is contained in:
		
							parent
							
								
									362d3831ea
								
							
						
					
					
						commit
						91735f4f3c
					
				| @ -12,14 +12,12 @@ import EntryTransaction | |||||||
| import RawLedger | import RawLedger | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| -- an Account caches an account's name, balance (including sub-accounts) |  | ||||||
| -- and transactions (excluding sub-accounts) |  | ||||||
| 
 |  | ||||||
| instance Show Account where | instance Show Account where | ||||||
|     show (Account a ts b) = printf "Account %s with %d transactions" a $ length ts |     show (Account a ts b) = printf "Account %s with %d transactions" a $ length ts | ||||||
| 
 | 
 | ||||||
| nullacct = Account "" [] nullamt | nullacct = Account "" [] nullamt | ||||||
| 
 | 
 | ||||||
|  | -- XXX SLOW | ||||||
| rawLedgerAccount :: RawLedger -> AccountName -> Account | rawLedgerAccount :: RawLedger -> AccountName -> Account | ||||||
| rawLedgerAccount l a =  | rawLedgerAccount l a =  | ||||||
|     Account  |     Account  | ||||||
| @ -133,6 +131,7 @@ rawLedgerAccountTreeMatching l acctpats showsubs maxdepth = | |||||||
| showAccountTree :: RawLedger -> Tree Account -> String | showAccountTree :: RawLedger -> Tree Account -> String | ||||||
| showAccountTree l = showAccountTree' l 0 . interestingAccountsFrom | showAccountTree l = showAccountTree' l 0 . interestingAccountsFrom | ||||||
| 
 | 
 | ||||||
|  | showAccountTree' :: RawLedger -> Int -> Tree Account -> String | ||||||
| showAccountTree' l indentlevel t | showAccountTree' l indentlevel t | ||||||
|     -- if this acct is boring, don't show it |     -- if this acct is boring, don't show it | ||||||
|     | isBoringInnerAccount l acct = subacctsindented 0 |     | isBoringInnerAccount l acct = subacctsindented 0 | ||||||
|  | |||||||
| @ -3,9 +3,6 @@ where | |||||||
| import Utils | import Utils | ||||||
| import Types | import Types | ||||||
| 
 | 
 | ||||||
| -- AccountNames are strings like "assets:cash:petty"; from these we build |  | ||||||
| -- the chart of accounts, which should be a simple hierarchy.  |  | ||||||
| 
 |  | ||||||
| accountNameComponents :: AccountName -> [String] | accountNameComponents :: AccountName -> [String] | ||||||
| accountNameComponents = splitAtElement ':' | accountNameComponents = splitAtElement ':' | ||||||
| 
 | 
 | ||||||
| @ -36,8 +33,10 @@ parentAccountNames a = parentAccountNames' $ parentAccountName a | |||||||
|       parentAccountNames' "" = [] |       parentAccountNames' "" = [] | ||||||
|       parentAccountNames' a = [a] ++ (parentAccountNames' $ parentAccountName a) |       parentAccountNames' a = [a] ++ (parentAccountNames' $ parentAccountName a) | ||||||
| 
 | 
 | ||||||
|  | p `isAccountNamePrefixOf` s = ((p ++ ":") `isPrefixOf` s) | ||||||
|  |      | ||||||
| s `isSubAccountNameOf` p =  | s `isSubAccountNameOf` p =  | ||||||
|     ((p ++ ":") `isPrefixOf` s) && (accountNameLevel s == (accountNameLevel p + 1)) |     (p `isAccountNamePrefixOf` s) && (accountNameLevel s == (accountNameLevel p + 1)) | ||||||
| 
 | 
 | ||||||
| subAccountNamesFrom :: [AccountName] -> AccountName -> [AccountName] | subAccountNamesFrom :: [AccountName] -> AccountName -> [AccountName] | ||||||
| subAccountNamesFrom accts a = filter (`isSubAccountNameOf` a) accts | subAccountNamesFrom accts a = filter (`isSubAccountNameOf` a) accts | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								Entry.hs
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Entry.hs
									
									
									
									
									
								
							| @ -6,6 +6,8 @@ import Types | |||||||
| import Transaction | import Transaction | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | instance Show Entry where show = showEntry | ||||||
|  | 
 | ||||||
| -- a register entry is displayed as two or more lines like this: | -- a register entry is displayed as two or more lines like this: | ||||||
| -- date       description          account                 amount       balance | -- date       description          account                 amount       balance | ||||||
| -- DDDDDDDDDD dddddddddddddddddddd aaaaaaaaaaaaaaaaaaaaaa  AAAAAAAAAAA AAAAAAAAAAAA | -- DDDDDDDDDD dddddddddddddddddddd aaaaaaaaaaaaaaaaaaaaaa  AAAAAAAAAAA AAAAAAAAAAAA | ||||||
| @ -17,8 +19,6 @@ import Transaction | |||||||
| -- amtWidth  = 11 | -- amtWidth  = 11 | ||||||
| -- balWidth  = 12 | -- balWidth  = 12 | ||||||
| 
 | 
 | ||||||
| instance Show Entry where show = showEntry |  | ||||||
| 
 |  | ||||||
| showEntry e = (showDate $ edate e) ++ " " ++ (showDescription $ edescription e) ++ " " | showEntry e = (showDate $ edate e) ++ " " ++ (showDescription $ edescription e) ++ " " | ||||||
| showDate d = printf "%-10s" d | showDate d = printf "%-10s" d | ||||||
| showDescription s = printf "%-20s" (elideRight 20 s) | showDescription s = printf "%-20s" (elideRight 20 s) | ||||||
|  | |||||||
| @ -3,17 +3,13 @@ module EntryTransaction | |||||||
| where | where | ||||||
| import Utils | import Utils | ||||||
| import Types | import Types | ||||||
|  | import AccountName | ||||||
| import Entry | import Entry | ||||||
| import Transaction | import Transaction | ||||||
| import Amount | import Amount | ||||||
| import Currency | import Currency | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| -- We convert Transactions into EntryTransactions, which are (entry, |  | ||||||
| -- transaction) pairs, since I couldn't see how to have transactions |  | ||||||
| -- reference their entry like in OO.  These are referred to as just |  | ||||||
| -- "transactions" in code above. |  | ||||||
| 
 |  | ||||||
| entry       (e,t) = e | entry       (e,t) = e | ||||||
| transaction (e,t) = t | transaction (e,t) = t | ||||||
| date        (e,t) = edate e | date        (e,t) = edate e | ||||||
| @ -26,6 +22,9 @@ amount      (e,t) = tamount t | |||||||
| flattenEntry :: Entry -> [EntryTransaction] | flattenEntry :: Entry -> [EntryTransaction] | ||||||
| flattenEntry e = [(e,t) | t <- etransactions e] | flattenEntry e = [(e,t) | t <- etransactions e] | ||||||
| 
 | 
 | ||||||
|  | accountNamesFromTransactions :: [EntryTransaction] -> [AccountName] | ||||||
|  | accountNamesFromTransactions ts = nub $ map account ts | ||||||
|  | 
 | ||||||
| entryTransactionsFrom :: [Entry] -> [EntryTransaction] | entryTransactionsFrom :: [Entry] -> [EntryTransaction] | ||||||
| entryTransactionsFrom es = concat $ map flattenEntry es | entryTransactionsFrom es = concat $ map flattenEntry es | ||||||
| 
 | 
 | ||||||
| @ -70,3 +69,19 @@ showTransactionAndBalance t b = | |||||||
| showBalance :: Amount -> String | showBalance :: Amount -> String | ||||||
| showBalance b = printf " %12s" (showAmountRoundedOrZero b) | showBalance b = printf " %12s" (showAmountRoundedOrZero b) | ||||||
| 
 | 
 | ||||||
|  | transactionsMatching :: ([String],[String]) -> [EntryTransaction] -> [EntryTransaction] | ||||||
|  | transactionsMatching ([],[]) ts = transactionsMatching ([".*"],[".*"]) ts | ||||||
|  | transactionsMatching (rs,[]) ts = transactionsMatching (rs,[".*"]) ts | ||||||
|  | transactionsMatching ([],rs) ts = transactionsMatching ([".*"],rs) ts | ||||||
|  | transactionsMatching (acctregexps,descregexps) ts = | ||||||
|  |     intersect  | ||||||
|  |     (concat [filter (matchTransactionAccount r) ts | r <- acctregexps]) | ||||||
|  |     (concat [filter (matchTransactionDescription r) ts | r <- descregexps]) | ||||||
|  | 
 | ||||||
|  | transactionsWithAccountName :: AccountName -> [EntryTransaction] -> [EntryTransaction] | ||||||
|  | transactionsWithAccountName a ts = [t | t <- ts, account t == a] | ||||||
|  |      | ||||||
|  | transactionsWithOrBelowAccountName :: AccountName -> [EntryTransaction] -> [EntryTransaction] | ||||||
|  | transactionsWithOrBelowAccountName a ts =  | ||||||
|  |     [t | t <- ts, account t == a || a `isAccountNamePrefixOf` (account t)] | ||||||
|  |      | ||||||
|  | |||||||
							
								
								
									
										109
									
								
								Ledger.hs
									
									
									
									
									
								
							
							
						
						
									
										109
									
								
								Ledger.hs
									
									
									
									
									
								
							| @ -1,6 +1,7 @@ | |||||||
| module Ledger | module Ledger | ||||||
| where | where | ||||||
| import qualified Data.Map as Map | import qualified Data.Map as Map | ||||||
|  | import Data.Map ((!)) | ||||||
| 
 | 
 | ||||||
| import Utils | import Utils | ||||||
| import Types | import Types | ||||||
| @ -12,38 +13,98 @@ import RawLedger | |||||||
| 
 | 
 | ||||||
| cacheLedger :: RawLedger -> Ledger | cacheLedger :: RawLedger -> Ledger | ||||||
| cacheLedger l =  | cacheLedger l =  | ||||||
|     Ledger  |     let  | ||||||
|     l |         ant = rawLedgerAccountNameTree l | ||||||
|     (rawLedgerAccountNameTree l) |         ans = flatten ant | ||||||
|     (Map.fromList [(a, rawLedgerAccount l a) | a <- rawLedgerAccountNames l]) |         ts = rawLedgerTransactions l | ||||||
|  |         amap = Map.fromList [ | ||||||
|  |                 (a, | ||||||
|  |                  Account a | ||||||
|  |                          (transactionsWithAccountName a ts) | ||||||
|  |                          (sumEntryTransactions $ transactionsWithOrBelowAccountName a ts) | ||||||
|  |                 ) | a <- ans] | ||||||
|  |     in | ||||||
|  |           Ledger l ant amap | ||||||
|  | 
 | ||||||
|  | ledgerAccount :: Ledger -> AccountName -> Account | ||||||
|  | -- wtf  ledgerAccount l = ((accounts l) (!)) | ||||||
|  | ledgerAccount l aname = head [a | (n,a) <- Map.toList $ accounts l, n == aname] | ||||||
| 
 | 
 | ||||||
| ledgerTransactions :: Ledger -> [EntryTransaction] | ledgerTransactions :: Ledger -> [EntryTransaction] | ||||||
| ledgerTransactions l = concatMap atransactions $ Map.elems $ accounts l | ledgerTransactions l = concatMap atransactions $ Map.elems $ accounts l | ||||||
| 
 | 
 | ||||||
| -- unoptimised | -- XXX optimise | ||||||
| ledgerTransactionsMatching :: ([String],[String]) -> Ledger -> [EntryTransaction] | ledgerTransactionsMatching :: ([String],[String]) -> Ledger -> [EntryTransaction] | ||||||
| ledgerTransactionsMatching pats l = rawLedgerTransactionsMatching pats $ rawledger l | ledgerTransactionsMatching pats l = rawLedgerTransactionsMatching pats $ rawledger l | ||||||
| 
 | 
 | ||||||
| -- XXX optimise | -- XXX optimise (in progress) | ||||||
| ledgerTransactionsMatching1 :: ([String],[String]) -> Ledger -> [EntryTransaction] |  | ||||||
| ledgerTransactionsMatching1 ([],[]) l = rawLedgerTransactionsMatching ([".*"],[".*"]) (rawledger l) |  | ||||||
| ledgerTransactionsMatching1 (rs,[]) l = rawLedgerTransactionsMatching (rs,[".*"]) (rawledger l) |  | ||||||
| ledgerTransactionsMatching1 ([],rs) l = rawLedgerTransactionsMatching ([".*"],rs) (rawledger l) |  | ||||||
| ledgerTransactionsMatching1 (acctregexps,descregexps) l = |  | ||||||
|     intersect  |  | ||||||
|     (concat [filter (matchTransactionAccount r) ts | r <- acctregexps]) |  | ||||||
|     (concat [filter (matchTransactionDescription r) ts | r <- descregexps]) |  | ||||||
|     where ts = ledgerTransactions l |  | ||||||
| 
 |  | ||||||
| -- unoptimised |  | ||||||
| showLedgerAccounts :: Ledger -> [String] -> Bool -> Int -> String | showLedgerAccounts :: Ledger -> [String] -> Bool -> Int -> String | ||||||
| showLedgerAccounts l acctpats showsubs maxdepth =  | showLedgerAccounts l acctpats showsubs maxdepth =  | ||||||
|     showRawLedgerAccounts (rawledger l) acctpats showsubs maxdepth |  | ||||||
| 
 |  | ||||||
| -- XXX optimise |  | ||||||
| showLedgerAccounts1 :: Ledger -> [String] -> Bool -> Int -> String |  | ||||||
| showLedgerAccounts1 l acctpats showsubs maxdepth =  |  | ||||||
|     concatMap  |     concatMap  | ||||||
|     (showAccountTree (rawledger l))  |     (showAccountTree2 l)  | ||||||
|     (branches (rawLedgerAccountTreeMatching (rawledger l) acctpats showsubs maxdepth)) |     (branches (ledgerAccountTreeMatching l acctpats showsubs maxdepth)) | ||||||
|  | 
 | ||||||
|  | showAccountTree2 :: Ledger -> Tree Account -> String | ||||||
|  | showAccountTree2 l = showAccountTree'2 l 0 . interestingAccountsFrom | ||||||
|  | 
 | ||||||
|  | showAccountTree'2 :: Ledger -> Int -> Tree Account -> String | ||||||
|  | showAccountTree'2 l indentlevel t | ||||||
|  |     -- if this acct is boring, don't show it | ||||||
|  |     | isBoringInnerAccount2 l acct = subacctsindented 0 | ||||||
|  |     -- otherwise show normal indented account name with balance,  | ||||||
|  |     -- prefixing the names of any boring parents | ||||||
|  |     | otherwise =  | ||||||
|  |         bal ++ "  " ++ indent ++ prefix ++ leafname ++ "\n" ++ (subacctsindented 1) | ||||||
|  |     where | ||||||
|  |       acct = root t | ||||||
|  |       subacctsindented i = concatMap (showAccountTree'2 l (indentlevel+i)) $ branches t | ||||||
|  |       bal = printf "%20s" $ show $ abalance $ acct | ||||||
|  |       indent = replicate (indentlevel * 2) ' ' | ||||||
|  |       prefix = concatMap (++ ":") $ map accountLeafName boringparents | ||||||
|  |       boringparents = takeWhile (isBoringInnerAccountName2 l) $ parentAccountNames $ aname acct | ||||||
|  |       leafname = accountLeafName $ aname acct | ||||||
|  | 
 | ||||||
|  | isBoringInnerAccount2 :: Ledger -> Account -> Bool | ||||||
|  | isBoringInnerAccount2 l a | ||||||
|  |     | name == "top" = False | ||||||
|  |     | (length txns == 0) && ((length subs) == 1) = True | ||||||
|  |     | otherwise = False | ||||||
|  |     where       | ||||||
|  |       name = aname a | ||||||
|  |       txns = atransactions a | ||||||
|  |       subs = subAccountNamesFrom (accountnames l) name | ||||||
|  | 
 | ||||||
|  | accountnames :: Ledger -> [AccountName] | ||||||
|  | accountnames l = flatten $ accountnametree l | ||||||
|  | 
 | ||||||
|  | isBoringInnerAccountName2 :: Ledger -> AccountName -> Bool | ||||||
|  | isBoringInnerAccountName2 l name | ||||||
|  |     | name == "top" = False | ||||||
|  |     | (length txns == 0) && ((length subs) == 1) = True | ||||||
|  |     | otherwise = False | ||||||
|  |     where | ||||||
|  |       txns = transactionsInAccountNamed2 l name | ||||||
|  |       subs = subAccountNamesFrom (rawLedgerAccountNames (rawledger l)) name | ||||||
|  | 
 | ||||||
|  | transactionsInAccountNamed2 :: Ledger -> AccountName -> [EntryTransaction] | ||||||
|  | transactionsInAccountNamed2 l a = atransactions $ ledgerAccount l a | ||||||
|  | 
 | ||||||
|  | ---- | ||||||
|  | 
 | ||||||
|  | ledgerAccountTreeMatching :: Ledger -> [String] -> Bool -> Int -> Tree Account | ||||||
|  | ledgerAccountTreeMatching l [] showsubs maxdepth =  | ||||||
|  |     ledgerAccountTreeMatching l [".*"] showsubs maxdepth | ||||||
|  | ledgerAccountTreeMatching l acctpats showsubs maxdepth =  | ||||||
|  |     addDataToAccountNameTree2 l $  | ||||||
|  |     filterAccountNameTree acctpats showsubs maxdepth $  | ||||||
|  |     accountnametree l | ||||||
|  | 
 | ||||||
|  | addDataToAccountNameTree2 :: Ledger -> Tree AccountName -> Tree Account | ||||||
|  | addDataToAccountNameTree2 l ant =  | ||||||
|  |     Node  | ||||||
|  |     (ledgerAccount l $ root ant)  | ||||||
|  |     (map (addDataToAccountNameTree2 l) $ branches ant) | ||||||
|  | 
 | ||||||
|  | -- ledgerAccountNames :: Ledger -> [AccountName] | ||||||
|  | -- ledgerAccountNames = sort . expandAccountNames . rawLedgerAccountNamesUsed | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										72
									
								
								NOTES
									
									
									
									
									
								
							
							
						
						
									
										72
									
								
								NOTES
									
									
									
									
									
								
							| @ -10,11 +10,79 @@ hledger project notes | |||||||
| *********** description                            EntryTransaction                    48   0.0    0.0     0.0    0.0 | *********** description                            EntryTransaction                    48   0.0    0.0     0.0    0.0 | ||||||
| ********** matchTransactionAccount                 EntryTransaction                    864  66.7    7.3    66.7    7.3 | ********** matchTransactionAccount                 EntryTransaction                    864  66.7    7.3    66.7    7.3 | ||||||
| *********** account                                EntryTransaction                    864   0.0    0.0     0.0    0.0 | *********** account                                EntryTransaction                    864   0.0    0.0     0.0    0.0 | ||||||
|      | **** cachedledger added | ||||||
| **** with cachedledger, unoptimised |  | ||||||
|       matchTransactionAccount EntryTransaction           619       86602  13.4    2.4    13.5    2.4 |       matchTransactionAccount EntryTransaction           619       86602  13.4    2.4    13.5    2.4 | ||||||
|       matchTransactionAccount EntryTransaction           558       91637  22.8    2.8    22.9    2.8 |       matchTransactionAccount EntryTransaction           558       91637  22.8    2.8    22.9    2.8 | ||||||
|       matchTransactionAccount EntryTransaction           520       91637  16.8    2.6    16.9    2.6 |       matchTransactionAccount EntryTransaction           520       91637  16.8    2.6    16.9    2.6 | ||||||
|  | **** functions renamed | ||||||
|  |    balance               Main                                                 334           1   0.0    0.0    99.6   97.4 | ||||||
|  |     showLedgerAccounts   Ledger                                               460           1   0.0    0.0    99.6   97.3 | ||||||
|  |      showRawLedgerAccounts Account                                              461           1   0.1    0.0    99.6   97.3 | ||||||
|  |       showAccountTree    Account                                              505           1   0.0    0.0    31.6   37.3 | ||||||
|  |        showAccountTree'  Account                                              506          91   0.0    0.0    31.6   37.3 | ||||||
|  |         isBoringInnerAccountName Account                                              613          86   0.1    0.0    29.4   31.1 | ||||||
|  |          transactionsInAccountNamed Account                                              614          86   0.0    0.0    17.3    4.3 | ||||||
|  |           rawLedgerTransactionsMatching RawLedger                                            615         172   0.7    0.7    17.3    4.3 | ||||||
|  |            matchTransactionAccount EntryTransaction                                     619       86602  14.8    2.4    14.9    2.4 | ||||||
|  | >     rawLedgerAccountTreeMatching Account                                              463           2   0.0    0.0    67.9   60.0 | ||||||
|  | >      addDataToAccountNameTree Account                                              465          93   0.0    0.0    67.7   59.8 | ||||||
|  | >       rawLedgerAccount Account                                              512          92   0.0    0.0    67.7   59.8 | ||||||
|  | >        transactionsInAccountNamed Account                                              515          91   0.0    0.0    29.0   20.0 | ||||||
|  | >         rawLedgerTransactionsMatching RawLedger                                            516         182   3.6   13.9    29.0   20.0 | ||||||
|  | >          matchTransactionAccount EntryTransaction                                     520       91637  17.1    2.6    17.2    2.6 | ||||||
|  |          aggregateBalanceInAccountNamed Account                                              550          91   0.0    0.0    38.7   39.8 | ||||||
|  |           aggregateTransactionsInAccountNamed Account                                              553          91   0.0    0.0    38.7   39.8 | ||||||
|  |            rawLedgerTransactionsMatching RawLedger                                            554         182   7.3   32.8    38.7   39.7 | ||||||
|  |             matchTransactionAccount EntryTransaction                                     558       91637  22.6    2.8    22.8    2.8 | ||||||
|  | 
 | ||||||
|  | 1 | ||||||
|  | showRawLedgerAccounts l acctpats showsubs maxdepth =  | ||||||
|  |     concatMap  | ||||||
|  |     (showAccountTree l)  | ||||||
|  |     (branches (rawLedgerAccountTreeMatching l acctpats showsubs maxdepth)) | ||||||
|  | 
 | ||||||
|  | 2 | ||||||
|  | rawLedgerAccountTreeMatching l [] showsubs maxdepth =  | ||||||
|  |     rawLedgerAccountTreeMatching l [".*"] showsubs maxdepth | ||||||
|  | rawLedgerAccountTreeMatching l acctpats showsubs maxdepth =  | ||||||
|  |     addDataToAccountNameTree l $  | ||||||
|  |     filterAccountNameTree acctpats showsubs maxdepth $  | ||||||
|  |     rawLedgerAccountNameTree l | ||||||
|  | 
 | ||||||
|  | 93 | ||||||
|  | addDataToAccountNameTree l ant =  | ||||||
|  |     Node  | ||||||
|  |     (rawLedgerAccount l $ root ant)  | ||||||
|  |     (map (addDataToAccountNameTree l) $ branches ant) | ||||||
|  | 
 | ||||||
|  | 92 | ||||||
|  | rawLedgerAccount l a =  | ||||||
|  |     Account  | ||||||
|  |     a  | ||||||
|  |     (transactionsInAccountNamed l a)  | ||||||
|  |     (aggregateBalanceInAccountNamed l a) | ||||||
|  | 
 | ||||||
|  | 91 | ||||||
|  | transactionsInAccountNamed l a = | ||||||
|  |     rawLedgerTransactionsMatching (["^" ++ a ++ "$"], []) l | ||||||
|  | 
 | ||||||
|  | 182 | ||||||
|  | rawLedgerTransactionsMatching ([],[]) l = rawLedgerTransactionsMatching ([".*"],[".*"]) l | ||||||
|  | rawLedgerTransactionsMatching (rs,[]) l = rawLedgerTransactionsMatching (rs,[".*"]) l | ||||||
|  | rawLedgerTransactionsMatching ([],rs) l = rawLedgerTransactionsMatching ([".*"],rs) l | ||||||
|  | rawLedgerTransactionsMatching (acctregexps,descregexps) l = | ||||||
|  |     intersect  | ||||||
|  |     (concat [filter (matchTransactionAccount r) ts | r <- acctregexps]) | ||||||
|  |     (concat [filter (matchTransactionDescription r) ts | r <- descregexps]) | ||||||
|  |     where ts = rawLedgerTransactions l | ||||||
|  | 
 | ||||||
|  | 91637 | ||||||
|  | matchTransactionAccount s t = | ||||||
|  |     case matchRegex (mkRegex s) (account t) of | ||||||
|  |       Nothing -> False | ||||||
|  |       otherwise -> True | ||||||
|  | 
 | ||||||
|  | **** begin optimisation | ||||||
| ** make some decent tests | ** make some decent tests | ||||||
| ** bugs | ** bugs | ||||||
| *** space after account makes it a new account | *** space after account makes it a new account | ||||||
|  | |||||||
| @ -3,8 +3,8 @@ where | |||||||
| import qualified Data.Map as Map | import qualified Data.Map as Map | ||||||
| 
 | 
 | ||||||
| import Utils | import Utils | ||||||
| import AccountName |  | ||||||
| import Types | import Types | ||||||
|  | import AccountName | ||||||
| import Entry | import Entry | ||||||
| import EntryTransaction | import EntryTransaction | ||||||
| 
 | 
 | ||||||
| @ -31,9 +31,6 @@ rawLedgerTransactionsMatching (acctregexps,descregexps) l = | |||||||
| rawLedgerAccountTransactions :: RawLedger -> AccountName -> [EntryTransaction] | rawLedgerAccountTransactions :: RawLedger -> AccountName -> [EntryTransaction] | ||||||
| rawLedgerAccountTransactions l a = rawLedgerTransactionsMatching (["^" ++ a ++ "$"], []) l | rawLedgerAccountTransactions l a = rawLedgerTransactionsMatching (["^" ++ a ++ "$"], []) l | ||||||
|             |             | ||||||
| accountNamesFromTransactions :: [EntryTransaction] -> [AccountName] |  | ||||||
| accountNamesFromTransactions ts = nub $ map account ts |  | ||||||
| 
 |  | ||||||
| rawLedgerAccountNamesUsed :: RawLedger -> [AccountName] | rawLedgerAccountNamesUsed :: RawLedger -> [AccountName] | ||||||
| rawLedgerAccountNamesUsed l = accountNamesFromTransactions $ entryTransactionsFrom $ entries l | rawLedgerAccountNamesUsed l = accountNamesFromTransactions $ entryTransactionsFrom $ entries l | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								Types.hs
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Types.hs
									
									
									
									
									
								
							| @ -114,7 +114,7 @@ data Account = Account { | |||||||
| -- a ledger with account info cached for faster queries | -- a ledger with account info cached for faster queries | ||||||
| data Ledger = Ledger { | data Ledger = Ledger { | ||||||
|       rawledger :: RawLedger,  |       rawledger :: RawLedger,  | ||||||
|       accountnames :: Tree AccountName, |       accountnametree :: Tree AccountName, | ||||||
|       accounts :: Map.Map AccountName Account |       accounts :: Map.Map AccountName Account | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user