Hlint: Warning: Eta reduce
This commit is contained in:
		
							parent
							
								
									4e5d463927
								
							
						
					
					
						commit
						ddc176d83e
					
				| @ -109,7 +109,7 @@ import System.IO.UTF8 | |||||||
| 
 | 
 | ||||||
| -- | Print a balance report. | -- | Print a balance report. | ||||||
| balance :: [Opt] -> [String] -> Ledger -> IO () | balance :: [Opt] -> [String] -> Ledger -> IO () | ||||||
| balance opts args l = putStr $ showBalanceReport opts args l | balance opts args = putStr . showBalanceReport opts args | ||||||
| 
 | 
 | ||||||
| -- | Generate a balance report with the specified options for this ledger. | -- | Generate a balance report with the specified options for this ledger. | ||||||
| showBalanceReport :: [Opt] -> [String] -> Ledger -> String | showBalanceReport :: [Opt] -> [String] -> Ledger -> String | ||||||
| @ -154,6 +154,6 @@ isInteresting opts l a | |||||||
|       notlikesub = not $ isZeroMixedAmount exclbalance where exclbalance = sumTransactions $ atransactions acct |       notlikesub = not $ isZeroMixedAmount exclbalance where exclbalance = sumTransactions $ atransactions acct | ||||||
|       numinterestingsubs = length $ filter isInterestingTree subtrees |       numinterestingsubs = length $ filter isInterestingTree subtrees | ||||||
|           where |           where | ||||||
|             isInterestingTree t = treeany (isInteresting opts l . aname) t |             isInterestingTree = treeany (isInteresting opts l . aname) | ||||||
|             subtrees = map (fromJust . ledgerAccountTreeAt l) $ ledgerSubAccounts l $ ledgerAccount l a |             subtrees = map (fromJust . ledgerAccountTreeAt l) $ ledgerSubAccounts l $ ledgerAccount l a | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -111,7 +111,7 @@ choose_acct_desc rules (acct,desc) | null matchingrules = (acct,desc) | |||||||
|       matched = fst $ fst $ fromJust m |       matched = fst $ fst $ fromJust m | ||||||
|       d = fromMaybe matched repl |       d = fromMaybe matched repl | ||||||
| 
 | 
 | ||||||
| matchregex s = matchRegexPR ("(?i)"++s) | matchregex = matchRegexPR . ("(?i)" ++) | ||||||
| 
 | 
 | ||||||
| fixdate :: String -> String | fixdate :: String -> String | ||||||
| fixdate s = maybe "0000/00/00" showDate $  | fixdate s = maybe "0000/00/00" showDate $  | ||||||
|  | |||||||
| @ -17,7 +17,7 @@ barchar = '*' | |||||||
| -- | Print a histogram of some statistic per reporting interval, such as | -- | Print a histogram of some statistic per reporting interval, such as | ||||||
| -- number of transactions per day. | -- number of transactions per day. | ||||||
| histogram :: [Opt] -> [String] -> Ledger -> IO () | histogram :: [Opt] -> [String] -> Ledger -> IO () | ||||||
| histogram opts args l = putStr $ showHistogram opts args l | histogram opts args = putStr . showHistogram opts args | ||||||
| 
 | 
 | ||||||
| showHistogram :: [Opt] -> [String] -> Ledger -> String | showHistogram :: [Opt] -> [String] -> Ledger -> String | ||||||
| showHistogram opts args l = concatMap (printDayWith countBar) daytxns | showHistogram opts args l = concatMap (printDayWith countBar) daytxns | ||||||
| @ -33,7 +33,7 @@ showHistogram opts args l = concatMap (printDayWith countBar) daytxns | |||||||
|       filterempties |       filterempties | ||||||
|           | Empty `elem` opts = id |           | Empty `elem` opts = id | ||||||
|           | otherwise = filter (not . isZeroMixedAmount . tamount) |           | otherwise = filter (not . isZeroMixedAmount . tamount) | ||||||
|       matchapats t = matchpats apats $ taccount t |       matchapats = matchpats apats . taccount | ||||||
|       (apats,_) = parsePatternArgs args |       (apats,_) = parsePatternArgs args | ||||||
|       filterdepth | interval == NoInterval = filter (\t -> (accountNameLevel $ taccount t) <= depth) |       filterdepth | interval == NoInterval = filter (\t -> (accountNameLevel $ taccount t) <= depth) | ||||||
|                   | otherwise = id |                   | otherwise = id | ||||||
| @ -43,6 +43,6 @@ printDayWith f (DateSpan b _, ts) = printf "%s %s\n" (show $ fromJust b) (f ts) | |||||||
| 
 | 
 | ||||||
| countBar ts = replicate (length ts) barchar | countBar ts = replicate (length ts) barchar | ||||||
| 
 | 
 | ||||||
| total ts = show $ sumTransactions ts | total = show . sumTransactions | ||||||
| 
 | 
 | ||||||
| -- totalBar ts = replicate (sumTransactions ts) barchar | -- totalBar ts = replicate (sumTransactions ts) barchar | ||||||
|  | |||||||
| @ -14,7 +14,7 @@ import System.IO.UTF8 | |||||||
| 
 | 
 | ||||||
| -- | Print ledger transactions in standard format. | -- | Print ledger transactions in standard format. | ||||||
| print' :: [Opt] -> [String] -> Ledger -> IO () | print' :: [Opt] -> [String] -> Ledger -> IO () | ||||||
| print' opts args l = putStr $ showLedgerTransactions opts args l | print' opts args = putStr . showLedgerTransactions opts args | ||||||
| 
 | 
 | ||||||
| showLedgerTransactions :: [Opt] -> [String] -> Ledger -> String | showLedgerTransactions :: [Opt] -> [String] -> Ledger -> String | ||||||
| showLedgerTransactions opts args l = concatMap showLedgerTransactionUnelided txns | showLedgerTransactions opts args l = concatMap showLedgerTransactionUnelided txns | ||||||
|  | |||||||
| @ -14,7 +14,7 @@ import System.IO.UTF8 | |||||||
| 
 | 
 | ||||||
| -- | Print a register report. | -- | Print a register report. | ||||||
| register :: [Opt] -> [String] -> Ledger -> IO () | register :: [Opt] -> [String] -> Ledger -> IO () | ||||||
| register opts args l = putStr $ showRegisterReport opts args l | register opts args = putStr . showRegisterReport opts args | ||||||
| 
 | 
 | ||||||
| {- | | {- | | ||||||
| Generate the register report. Each ledger entry is displayed as two or | Generate the register report. Each ledger entry is displayed as two or | ||||||
| @ -42,7 +42,7 @@ showRegisterReport opts args l | |||||||
|       (precedingts, ts') = break (matchdisplayopt dopt) ts |       (precedingts, ts') = break (matchdisplayopt dopt) ts | ||||||
|       (displayedts, _) = span (matchdisplayopt dopt) ts' |       (displayedts, _) = span (matchdisplayopt dopt) ts' | ||||||
|       startbal = sumTransactions precedingts |       startbal = sumTransactions precedingts | ||||||
|       matchapats t = matchpats apats $ taccount t |       matchapats = matchpats apats . taccount | ||||||
|       (apats,_) = parsePatternArgs args |       (apats,_) = parsePatternArgs args | ||||||
|       matchdisplayopt Nothing _ = True |       matchdisplayopt Nothing _ = True | ||||||
|       matchdisplayopt (Just e) t = (fromparse $ parsewith datedisplayexpr e) t |       matchdisplayopt (Just e) t = (fromparse $ parsewith datedisplayexpr e) t | ||||||
|  | |||||||
| @ -141,7 +141,7 @@ resize x y a = setCursorY cy' a{aw=x,ah=y} | |||||||
|       cy' = min cy (y-2) |       cy' = min cy (y-2) | ||||||
| 
 | 
 | ||||||
| moveToTop :: AppState -> AppState | moveToTop :: AppState -> AppState | ||||||
| moveToTop a = setPosY 0 a | moveToTop = setPosY 0 | ||||||
| 
 | 
 | ||||||
| moveToBottom :: AppState -> AppState | moveToBottom :: AppState -> AppState | ||||||
| moveToBottom a = setPosY (length $ abuf a) a | moveToBottom a = setPosY (length $ abuf a) a | ||||||
| @ -216,7 +216,7 @@ enter scr@RegisterScreen a = updateData $ pushLoc Loc{scr=scr,sy=0,cy=0} a | |||||||
| enter scr@PrintScreen a    = updateData $ pushLoc Loc{scr=scr,sy=0,cy=0} a | enter scr@PrintScreen a    = updateData $ pushLoc Loc{scr=scr,sy=0,cy=0} a | ||||||
| -- enter scr@LedgerScreen a   = updateData $ pushLoc Loc{scr=scr,sy=0,cy=0} a | -- enter scr@LedgerScreen a   = updateData $ pushLoc Loc{scr=scr,sy=0,cy=0} a | ||||||
| 
 | 
 | ||||||
| resetTrailAndEnter scr a = enter scr $ clearLocs a | resetTrailAndEnter scr = enter scr . clearLocs | ||||||
| 
 | 
 | ||||||
| -- | Regenerate the display data appropriate for the current screen. | -- | Regenerate the display data appropriate for the current screen. | ||||||
| updateData :: AppState -> AppState | updateData :: AppState -> AppState | ||||||
| @ -318,7 +318,7 @@ renderScreen (a@AppState{aw=w,ah=h,abuf=buf,amsg=msg}) = | |||||||
|                        | otherwise = (head rest, tail rest) |                        | otherwise = (head rest, tail rest) | ||||||
|       (above,rest) = splitAt cy linestorender |       (above,rest) = splitAt cy linestorender | ||||||
|       linestorender = map padclipline $ take (h-1) $ drop sy $ buf ++ replicate h blankline |       linestorender = map padclipline $ take (h-1) $ drop sy $ buf ++ replicate h blankline | ||||||
|       padclipline l = take w $ l ++ blankline |       padclipline = take w . (++ blankline) | ||||||
|       blankline = replicate w ' ' |       blankline = replicate w ' ' | ||||||
| --       mainimg = (renderString attr $ unlines $ above) | --       mainimg = (renderString attr $ unlines $ above) | ||||||
| --           <-> | --           <-> | ||||||
| @ -334,7 +334,7 @@ padClipString :: Int -> Int -> String -> [String] | |||||||
| padClipString h w s = rows | padClipString h w s = rows | ||||||
|     where |     where | ||||||
|       rows = map padclipline $ take h $ lines s ++ replicate h blankline |       rows = map padclipline $ take h $ lines s ++ replicate h blankline | ||||||
|       padclipline l = take w $ l ++ blankline |       padclipline = take w . (++ blankline) | ||||||
|       blankline = replicate w ' ' |       blankline = replicate w ' ' | ||||||
| 
 | 
 | ||||||
| renderString :: Attr -> String -> Image | renderString :: Attr -> String -> Image | ||||||
| @ -346,7 +346,7 @@ renderString attr s = vert_cat $ map (string attr) rows | |||||||
|       ls = lines s |       ls = lines s | ||||||
| 
 | 
 | ||||||
| renderStatus :: Int -> String -> Image | renderStatus :: Int -> String -> Image | ||||||
| renderStatus w s = string statusattr (take w (s ++ repeat ' '))  | renderStatus w = string statusattr . take w . (++ repeat ' ') | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| -- the all-important theming engine | -- the all-important theming engine | ||||||
|  | |||||||
| @ -34,14 +34,14 @@ accountNameLevel a = (length $ filter (==acctsepchar) a) + 1 | |||||||
| -- | ["a:b:c","d:e"] -> ["a","a:b","a:b:c","d","d:e"] | -- | ["a:b:c","d:e"] -> ["a","a:b","a:b:c","d","d:e"] | ||||||
| expandAccountNames :: [AccountName] -> [AccountName] | expandAccountNames :: [AccountName] -> [AccountName] | ||||||
| expandAccountNames as = nub $ concat $ map expand as | expandAccountNames as = nub $ concat $ map expand as | ||||||
|     where expand as = map accountNameFromComponents (tail $ inits $ accountNameComponents as) |     where expand = map accountNameFromComponents . tail . inits . accountNameComponents | ||||||
| 
 | 
 | ||||||
| -- | ["a:b:c","d:e"] -> ["a","d"] | -- | ["a:b:c","d:e"] -> ["a","d"] | ||||||
| topAccountNames :: [AccountName] -> [AccountName] | topAccountNames :: [AccountName] -> [AccountName] | ||||||
| topAccountNames as = [a | a <- expandAccountNames as, accountNameLevel a == 1] | topAccountNames as = [a | a <- expandAccountNames as, accountNameLevel a == 1] | ||||||
| 
 | 
 | ||||||
| parentAccountName :: AccountName -> AccountName | parentAccountName :: AccountName -> AccountName | ||||||
| parentAccountName a = accountNameFromComponents $ init $ accountNameComponents a | parentAccountName = accountNameFromComponents . init . accountNameComponents | ||||||
| 
 | 
 | ||||||
| parentAccountNames :: AccountName -> [AccountName] | parentAccountNames :: AccountName -> [AccountName] | ||||||
| parentAccountNames a = parentAccountNames' $ parentAccountName a | parentAccountNames a = parentAccountNames' $ parentAccountName a | ||||||
| @ -50,7 +50,7 @@ parentAccountNames a = parentAccountNames' $ parentAccountName a | |||||||
|       parentAccountNames' a = [a] ++ (parentAccountNames' $ parentAccountName a) |       parentAccountNames' a = [a] ++ (parentAccountNames' $ parentAccountName a) | ||||||
| 
 | 
 | ||||||
| isAccountNamePrefixOf :: AccountName -> AccountName -> Bool | isAccountNamePrefixOf :: AccountName -> AccountName -> Bool | ||||||
| p `isAccountNamePrefixOf` s = ((p ++ [acctsepchar] ) `isPrefixOf` s) | isAccountNamePrefixOf = isPrefixOf . (++ [acctsepchar]) | ||||||
| 
 | 
 | ||||||
| isSubAccountNameOf :: AccountName -> AccountName -> Bool | isSubAccountNameOf :: AccountName -> AccountName -> Bool | ||||||
| s `isSubAccountNameOf` p =  | s `isSubAccountNameOf` p =  | ||||||
|  | |||||||
| @ -126,12 +126,12 @@ punctuatethousands s = | |||||||
| 
 | 
 | ||||||
| -- | Does this amount appear to be zero when displayed with its given precision ? | -- | Does this amount appear to be zero when displayed with its given precision ? | ||||||
| isZeroAmount :: Amount -> Bool | isZeroAmount :: Amount -> Bool | ||||||
| isZeroAmount a = null $ filter (`elem` "123456789") $ showAmount a | isZeroAmount = null . filter (`elem` "123456789") . showAmount | ||||||
| 
 | 
 | ||||||
| -- | Is this amount "really" zero, regardless of the display precision ? | -- | Is this amount "really" zero, regardless of the display precision ? | ||||||
| -- Since we are using floating point, for now just test to some high precision. | -- Since we are using floating point, for now just test to some high precision. | ||||||
| isReallyZeroAmount :: Amount -> Bool | isReallyZeroAmount :: Amount -> Bool | ||||||
| isReallyZeroAmount a = null $ filter (`elem` "123456789") $ printf "%.10f" $ quantity a | isReallyZeroAmount = null . filter (`elem` "123456789") . printf "%.10f" . quantity | ||||||
| 
 | 
 | ||||||
| -- | Access a mixed amount's components. | -- | Access a mixed amount's components. | ||||||
| amounts :: MixedAmount -> [Amount] | amounts :: MixedAmount -> [Amount] | ||||||
|  | |||||||
| @ -30,7 +30,7 @@ import Ledger.Utils | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| showDate :: Day -> String | showDate :: Day -> String | ||||||
| showDate d = formatTime defaultTimeLocale "%Y/%m/%d" d | showDate = formatTime defaultTimeLocale "%Y/%m/%d" | ||||||
| 
 | 
 | ||||||
| getCurrentDay :: IO Day | getCurrentDay :: IO Day | ||||||
| getCurrentDay = do | getCurrentDay = do | ||||||
| @ -38,7 +38,7 @@ getCurrentDay = do | |||||||
|     return $ localDay (zonedTimeToLocalTime t) |     return $ localDay (zonedTimeToLocalTime t) | ||||||
| 
 | 
 | ||||||
| elapsedSeconds :: Fractional a => UTCTime -> UTCTime -> a | elapsedSeconds :: Fractional a => UTCTime -> UTCTime -> a | ||||||
| elapsedSeconds t1 t2 = realToFrac $ diffUTCTime t1 t2 | elapsedSeconds t1 = realToFrac . diffUTCTime t1 | ||||||
| 
 | 
 | ||||||
| -- | Split a DateSpan into one or more consecutive spans at the specified interval. | -- | Split a DateSpan into one or more consecutive spans at the specified interval. | ||||||
| splitSpan :: Interval -> DateSpan -> [DateSpan] | splitSpan :: Interval -> DateSpan -> [DateSpan] | ||||||
| @ -420,4 +420,4 @@ justdatespan rdate = do | |||||||
| 
 | 
 | ||||||
| nulldatespan = DateSpan Nothing Nothing | nulldatespan = DateSpan Nothing Nothing | ||||||
| 
 | 
 | ||||||
| mkdatespan b e = DateSpan (Just $ parsedate b) (Just $ parsedate e) | mkdatespan b = DateSpan (Just $ parsedate b) . Just . parsedate | ||||||
|  | |||||||
| @ -127,27 +127,27 @@ transactionsByAccount ts = m' | |||||||
| --      m' = Map.insert "top" sortedts m | --      m' = Map.insert "top" sortedts m | ||||||
| 
 | 
 | ||||||
| filtertxns :: [String] -> [Transaction] -> [Transaction] | filtertxns :: [String] -> [Transaction] -> [Transaction] | ||||||
| filtertxns apats ts = filter (matchpats apats . taccount) ts | filtertxns apats = filter (matchpats apats . taccount) | ||||||
| 
 | 
 | ||||||
| -- | List a ledger's account names. | -- | List a ledger's account names. | ||||||
| ledgerAccountNames :: Ledger -> [AccountName] | ledgerAccountNames :: Ledger -> [AccountName] | ||||||
| ledgerAccountNames l = drop 1 $ flatten $ accountnametree l | ledgerAccountNames = drop 1 . flatten . accountnametree | ||||||
| 
 | 
 | ||||||
| -- | Get the named account from a ledger. | -- | Get the named account from a ledger. | ||||||
| ledgerAccount :: Ledger -> AccountName -> Account | ledgerAccount :: Ledger -> AccountName -> Account | ||||||
| ledgerAccount l a = (accountmap l) ! a | ledgerAccount = (!) . accountmap | ||||||
| 
 | 
 | ||||||
| -- | List a ledger's accounts, in tree order | -- | List a ledger's accounts, in tree order | ||||||
| ledgerAccounts :: Ledger -> [Account] | ledgerAccounts :: Ledger -> [Account] | ||||||
| ledgerAccounts l = drop 1 $ flatten $ ledgerAccountTree 9999 l | ledgerAccounts = drop 1 . flatten . ledgerAccountTree 9999 | ||||||
| 
 | 
 | ||||||
| -- | List a ledger's top-level accounts, in tree order | -- | List a ledger's top-level accounts, in tree order | ||||||
| ledgerTopAccounts :: Ledger -> [Account] | ledgerTopAccounts :: Ledger -> [Account] | ||||||
| ledgerTopAccounts l = map root $ branches $ ledgerAccountTree 9999 l | ledgerTopAccounts = map root . branches . ledgerAccountTree 9999 | ||||||
| 
 | 
 | ||||||
| -- | Accounts in ledger whose name matches the pattern, in tree order. | -- | Accounts in ledger whose name matches the pattern, in tree order. | ||||||
| ledgerAccountsMatching :: [String] -> Ledger -> [Account] | ledgerAccountsMatching :: [String] -> Ledger -> [Account] | ||||||
| ledgerAccountsMatching pats l = filter (matchpats pats . aname) $ accounts l | ledgerAccountsMatching pats = filter (matchpats pats . aname) . accounts | ||||||
| 
 | 
 | ||||||
| -- | List a ledger account's immediate subaccounts | -- | List a ledger account's immediate subaccounts | ||||||
| ledgerSubAccounts :: Ledger -> Account -> [Account] | ledgerSubAccounts :: Ledger -> Account -> [Account] | ||||||
| @ -156,7 +156,7 @@ ledgerSubAccounts l Account{aname=a} = | |||||||
| 
 | 
 | ||||||
| -- | List a ledger's "transactions", ie postings with transaction info attached. | -- | List a ledger's "transactions", ie postings with transaction info attached. | ||||||
| ledgerTransactions :: Ledger -> [Transaction] | ledgerTransactions :: Ledger -> [Transaction] | ||||||
| ledgerTransactions l = rawLedgerTransactions $ rawledger l | ledgerTransactions = rawLedgerTransactions . rawledger | ||||||
| 
 | 
 | ||||||
| -- | Get a ledger's tree of accounts to the specified depth. | -- | Get a ledger's tree of accounts to the specified depth. | ||||||
| ledgerAccountTree :: Int -> Ledger -> Tree Account | ledgerAccountTree :: Int -> Ledger -> Tree Account | ||||||
|  | |||||||
| @ -65,7 +65,7 @@ showLedgerTransaction' elide t = | |||||||
|       status = if ltstatus t then " *" else "" |       status = if ltstatus t then " *" else "" | ||||||
|       code = if (length $ ltcode t) > 0 then (printf " (%s)" $ ltcode t) else "" |       code = if (length $ ltcode t) > 0 then (printf " (%s)" $ ltcode t) else "" | ||||||
|       desc = " " ++ ltdescription t |       desc = " " ++ ltdescription t | ||||||
|       showdate d = printf "%-10s" (showDate d) |       showdate = printf "%-10s" . showDate | ||||||
|       showpostings ps |       showpostings ps | ||||||
|           | elide && length ps > 1 && isLedgerTransactionBalanced t |           | elide && length ps > 1 && isLedgerTransactionBalanced t | ||||||
|               = map showposting (init ps) ++ [showpostingnoamt (last ps)] |               = map showposting (init ps) ++ [showpostingnoamt (last ps)] | ||||||
|  | |||||||
| @ -113,7 +113,7 @@ ledgerInclude = do many1 spacenonewline | |||||||
|                    let inIncluded = show outerPos ++ " in included file " ++ show filename ++ ":\n" |                    let inIncluded = show outerPos ++ " in included file " ++ show filename ++ ":\n" | ||||||
|                    return $ do contents <- expandPath outerPos filename >>= readFileE outerPos |                    return $ do contents <- expandPath outerPos filename >>= readFileE outerPos | ||||||
|                                case runParser ledgerFile outerState filename contents of |                                case runParser ledgerFile outerState filename contents of | ||||||
|                                  Right l   -> l `catchError` (\err -> throwError $ inIncluded ++ err) |                                  Right l   -> l `catchError` (throwError . (inIncluded ++)) | ||||||
|                                  Left perr -> throwError $ inIncluded ++ show perr |                                  Left perr -> throwError $ inIncluded ++ show perr | ||||||
|     where readFileE outerPos filename = ErrorT $ do (liftM Right $ readFile filename) `catch` leftError |     where readFileE outerPos filename = ErrorT $ do (liftM Right $ readFile filename) `catch` leftError | ||||||
|               where leftError err = return $ Left $ currentPos ++ whileReading ++ show err |               where leftError err = return $ Left $ currentPos ++ whileReading ++ show err | ||||||
| @ -376,7 +376,7 @@ ledgercode = try (do { char '(' <?> "code"; code <- anyChar `manyTill` char ')'; | |||||||
| ledgerpostings :: GenParser Char LedgerFileCtx [Posting] | ledgerpostings :: GenParser Char LedgerFileCtx [Posting] | ||||||
| ledgerpostings = do | ledgerpostings = do | ||||||
|   ctx <- getState |   ctx <- getState | ||||||
|   let p `parses` s = isRight $ parseWithCtx ctx p s |   let parses p = isRight . parseWithCtx ctx p | ||||||
|   ls <- many1 linebeginningwithspaces |   ls <- many1 linebeginningwithspaces | ||||||
|   let ls' = filter (not . (ledgercommentline `parses`)) ls |   let ls' = filter (not . (ledgercommentline `parses`)) ls | ||||||
|   guard (not $ null ls') |   guard (not $ null ls') | ||||||
|  | |||||||
| @ -65,7 +65,7 @@ rawLedgerAccountNames :: RawLedger -> [AccountName] | |||||||
| rawLedgerAccountNames = sort . expandAccountNames . rawLedgerAccountNamesUsed | rawLedgerAccountNames = sort . expandAccountNames . rawLedgerAccountNamesUsed | ||||||
| 
 | 
 | ||||||
| rawLedgerAccountNameTree :: RawLedger -> Tree AccountName | rawLedgerAccountNameTree :: RawLedger -> Tree AccountName | ||||||
| rawLedgerAccountNameTree l = accountNameTreeFrom $ rawLedgerAccountNames l | rawLedgerAccountNameTree = accountNameTreeFrom . rawLedgerAccountNames | ||||||
| 
 | 
 | ||||||
| -- | Remove ledger transactions we are not interested in. | -- | Remove ledger transactions we are not interested in. | ||||||
| -- Keep only those which fall between the begin and end dates, and match | -- Keep only those which fall between the begin and end dates, and match | ||||||
| @ -191,5 +191,5 @@ matchpats pats str = | |||||||
|       match "" = True |       match "" = True | ||||||
|       match pat = containsRegex (abspat pat) str |       match pat = containsRegex (abspat pat) str | ||||||
|       negateprefix = "not:" |       negateprefix = "not:" | ||||||
|       isnegativepat pat = negateprefix `isPrefixOf` pat |       isnegativepat = (negateprefix `isPrefixOf`) | ||||||
|       abspat pat = if isnegativepat pat then drop (length negateprefix) pat else pat |       abspat pat = if isnegativepat pat then drop (length negateprefix) pat else pat | ||||||
|  | |||||||
| @ -34,7 +34,7 @@ flattenLedgerTransaction (LedgerTransaction d _ s _ desc _ ps _, n) = | |||||||
|     [Transaction n s d desc (paccount p) (pamount p) (ptype p) | p <- ps] |     [Transaction n s d desc (paccount p) (pamount p) (ptype p) | p <- ps] | ||||||
| 
 | 
 | ||||||
| accountNamesFromTransactions :: [Transaction] -> [AccountName] | accountNamesFromTransactions :: [Transaction] -> [AccountName] | ||||||
| accountNamesFromTransactions ts = nub $ map taccount ts | accountNamesFromTransactions = nub . map taccount | ||||||
| 
 | 
 | ||||||
| sumTransactions :: [Transaction] -> MixedAmount | sumTransactions :: [Transaction] -> MixedAmount | ||||||
| sumTransactions = sum . map tamount | sumTransactions = sum . map tamount | ||||||
|  | |||||||
| @ -130,14 +130,14 @@ padright w s = intercalate "\n" $ map (printf (printf "%%-%ds" w)) $ lines s | |||||||
| 
 | 
 | ||||||
| -- | Clip a multi-line string to the specified width and height from the top left. | -- | Clip a multi-line string to the specified width and height from the top left. | ||||||
| cliptopleft :: Int -> Int -> String -> String | cliptopleft :: Int -> Int -> String -> String | ||||||
| cliptopleft w h s = intercalate "\n" $ take h $ map (take w) $ lines s | cliptopleft w h = intercalate "\n" . take h . map (take w) . lines | ||||||
| 
 | 
 | ||||||
| -- | Clip and pad a multi-line string to fill the specified width and height. | -- | Clip and pad a multi-line string to fill the specified width and height. | ||||||
| fitto :: Int -> Int -> String -> String | fitto :: Int -> Int -> String -> String | ||||||
| fitto w h s = intercalate "\n" $ take h $ rows ++ repeat blankline | fitto w h s = intercalate "\n" $ take h $ rows ++ repeat blankline | ||||||
|     where |     where | ||||||
|       rows = map (fit w) $ lines s |       rows = map (fit w) $ lines s | ||||||
|       fit w s = take w $ s ++ repeat ' ' |       fit w = take w . (++ repeat ' ') | ||||||
|       blankline = replicate w ' ' |       blankline = replicate w ' ' | ||||||
| 
 | 
 | ||||||
| -- math | -- math | ||||||
| @ -236,10 +236,10 @@ tracewith f e = trace (f e) e | |||||||
| -- parsing | -- parsing | ||||||
| 
 | 
 | ||||||
| parsewith :: Parser a -> String -> Either ParseError a | parsewith :: Parser a -> String -> Either ParseError a | ||||||
| parsewith p ts = parse p "" ts | parsewith p = parse p "" | ||||||
| 
 | 
 | ||||||
| parseWithCtx :: b -> GenParser Char b a -> String -> Either ParseError a | parseWithCtx :: b -> GenParser Char b a -> String -> Either ParseError a | ||||||
| parseWithCtx ctx p ts = runParser p ctx "" ts | parseWithCtx ctx p = runParser p ctx "" | ||||||
| 
 | 
 | ||||||
| fromparse :: Either ParseError a -> a | fromparse :: Either ParseError a -> a | ||||||
| fromparse = either (\e -> error $ "parse error at "++(show e)) id | fromparse = either (\e -> error $ "parse error at "++(show e)) id | ||||||
| @ -248,7 +248,7 @@ nonspace :: GenParser Char st Char | |||||||
| nonspace = satisfy (not . isSpace) | nonspace = satisfy (not . isSpace) | ||||||
| 
 | 
 | ||||||
| spacenonewline :: GenParser Char st Char | spacenonewline :: GenParser Char st Char | ||||||
| spacenonewline = satisfy (\c -> c `elem` " \v\f\t") | spacenonewline = satisfy (`elem` " \v\f\t") | ||||||
| 
 | 
 | ||||||
| restofline :: GenParser Char st String | restofline :: GenParser Char st String | ||||||
| restofline = anyChar `manyTill` newline | restofline = anyChar `manyTill` newline | ||||||
|  | |||||||
| @ -116,7 +116,7 @@ optsWithConstructor f opts = concatMap get opts | |||||||
|     where get o = if f v == o then [o] else [] where v = value o |     where get o = if f v == o then [o] else [] where v = value o | ||||||
| 
 | 
 | ||||||
| optsWithConstructors fs opts = concatMap get opts | optsWithConstructors fs opts = concatMap get opts | ||||||
|     where get o = if any (\f -> f == o) fs then [o] else [] |     where get o = if any (== o) fs then [o] else [] | ||||||
| 
 | 
 | ||||||
| optValuesForConstructor f opts = concatMap get opts | optValuesForConstructor f opts = concatMap get opts | ||||||
|     where get o = if f v == o then [v] else [] where v = value o |     where get o = if f v == o then [v] else [] where v = value o | ||||||
|  | |||||||
							
								
								
									
										22
									
								
								Tests.hs
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								Tests.hs
									
									
									
									
									
								
							| @ -499,7 +499,7 @@ tests = [ | |||||||
| 
 | 
 | ||||||
|   ,"dateSpanFromOpts" ~: do |   ,"dateSpanFromOpts" ~: do | ||||||
|     let todaysdate = parsedate "2008/11/26" |     let todaysdate = parsedate "2008/11/26" | ||||||
|     let opts `gives` spans = show (dateSpanFromOpts todaysdate opts) `is` spans |     let gives = is . show . dateSpanFromOpts todaysdate | ||||||
|     [] `gives` "DateSpan Nothing Nothing" |     [] `gives` "DateSpan Nothing Nothing" | ||||||
|     [Begin "2008", End "2009"] `gives` "DateSpan (Just 2008-01-01) (Just 2009-01-01)" |     [Begin "2008", End "2009"] `gives` "DateSpan (Just 2008-01-01) (Just 2009-01-01)" | ||||||
|     [Period "in 2008"] `gives` "DateSpan (Just 2008-01-01) (Just 2009-01-01)" |     [Period "in 2008"] `gives` "DateSpan (Just 2008-01-01) (Just 2009-01-01)" | ||||||
| @ -519,9 +519,9 @@ tests = [ | |||||||
|      let now = utcToLocalTime tz now' |      let now = utcToLocalTime tz now' | ||||||
|          nowstr = showtime now |          nowstr = showtime now | ||||||
|          yesterday = prevday today |          yesterday = prevday today | ||||||
|          clockin t a = TimeLogEntry In t a |          clockin = TimeLogEntry In | ||||||
|          mktime d s = LocalTime d $ fromMaybe midnight $ parseTime defaultTimeLocale "%H:%M:%S" s |          mktime d = LocalTime d . fromMaybe midnight . parseTime defaultTimeLocale "%H:%M:%S" | ||||||
|          showtime t = formatTime defaultTimeLocale "%H:%M" t |          showtime = formatTime defaultTimeLocale "%H:%M" | ||||||
|          assertEntriesGiveStrings name es ss = assertEqual name ss (map ltdescription $ entriesFromTimeLogEntries now es) |          assertEntriesGiveStrings name es ss = assertEqual name ss (map ltdescription $ entriesFromTimeLogEntries now es) | ||||||
| 
 | 
 | ||||||
|      assertEntriesGiveStrings "started yesterday, split session at midnight" |      assertEntriesGiveStrings "started yesterday, split session at midnight" | ||||||
| @ -544,7 +544,7 @@ tests = [ | |||||||
|      ["assets","assets:cash","assets:checking","expenses","expenses:vacation"] |      ["assets","assets:cash","assets:checking","expenses","expenses:vacation"] | ||||||
| 
 | 
 | ||||||
|   ,"intervalFromOpts" ~: do |   ,"intervalFromOpts" ~: do | ||||||
|     let opts `gives` interval = intervalFromOpts opts `is` interval |     let gives = is . intervalFromOpts | ||||||
|     [] `gives` NoInterval |     [] `gives` NoInterval | ||||||
|     [WeeklyOpt] `gives` Weekly |     [WeeklyOpt] `gives` Weekly | ||||||
|     [MonthlyOpt] `gives` Monthly |     [MonthlyOpt] `gives` Monthly | ||||||
| @ -777,8 +777,8 @@ tests = [ | |||||||
|   ,"register report with display expression" ~: |   ,"register report with display expression" ~: | ||||||
|    do  |    do  | ||||||
|     l <- sampleledger |     l <- sampleledger | ||||||
|     let displayexpr `gives` dates =  |     let gives displayexpr =  | ||||||
|             registerdates (showRegisterReport [Display displayexpr] [] l) `is` dates |             (registerdates (showRegisterReport [Display displayexpr] [] l) `is`) | ||||||
|     "d<[2008/6/2]"  `gives` ["2008/01/01","2008/06/01"] |     "d<[2008/6/2]"  `gives` ["2008/01/01","2008/06/01"] | ||||||
|     "d<=[2008/6/2]" `gives` ["2008/01/01","2008/06/01","2008/06/02"] |     "d<=[2008/6/2]" `gives` ["2008/01/01","2008/06/01","2008/06/02"] | ||||||
|     "d=[2008/6/2]"  `gives` ["2008/06/02"] |     "d=[2008/6/2]"  `gives` ["2008/06/02"] | ||||||
| @ -889,7 +889,7 @@ tests = [ | |||||||
|       ,"                                актив:наличные                 -100            0"] |       ,"                                актив:наличные                 -100            0"] | ||||||
| 
 | 
 | ||||||
|   ,"smart dates" ~: do |   ,"smart dates" ~: do | ||||||
|     let str `gives` datestr = fixSmartDateStr (parsedate "2008/11/26") str `is` datestr |     let gives = is . fixSmartDateStr (parsedate "2008/11/26") | ||||||
|     "1999-12-02"   `gives` "1999/12/02" |     "1999-12-02"   `gives` "1999/12/02" | ||||||
|     "1999.12.02"   `gives` "1999/12/02" |     "1999.12.02"   `gives` "1999/12/02" | ||||||
|     "1999/3/2"     `gives` "1999/03/02" |     "1999/3/2"     `gives` "1999/03/02" | ||||||
| @ -924,7 +924,7 @@ tests = [ | |||||||
| --     "next january" `gives` "2009/01/01" | --     "next january" `gives` "2009/01/01" | ||||||
| 
 | 
 | ||||||
|   ,"splitSpan" ~: do |   ,"splitSpan" ~: do | ||||||
|     let (interval,span) `gives` spans = splitSpan interval span `is` spans |     let gives (interval, span) = (splitSpan interval span `is`) | ||||||
|     (NoInterval,mkdatespan "2008/01/01" "2009/01/01") `gives` |     (NoInterval,mkdatespan "2008/01/01" "2009/01/01") `gives` | ||||||
|      [mkdatespan "2008/01/01" "2009/01/01"] |      [mkdatespan "2008/01/01" "2009/01/01"] | ||||||
|     (Quarterly,mkdatespan "2008/01/01" "2009/01/01") `gives` |     (Quarterly,mkdatespan "2008/01/01" "2009/01/01") `gives` | ||||||
| @ -946,8 +946,8 @@ tests = [ | |||||||
|     (map aname $ ledgerSubAccounts l a) `is` ["assets:bank","assets:cash"] |     (map aname $ ledgerSubAccounts l a) `is` ["assets:bank","assets:cash"] | ||||||
| 
 | 
 | ||||||
|   ,"summariseTransactionsInDateSpan" ~: do |   ,"summariseTransactionsInDateSpan" ~: do | ||||||
|     let (b,e,tnum,depth,showempty,ts) `gives` summaryts =  |     let gives (b,e,tnum,depth,showempty,ts) =  | ||||||
|             summariseTransactionsInDateSpan (mkdatespan b e) tnum depth showempty ts `is` summaryts |             (summariseTransactionsInDateSpan (mkdatespan b e) tnum depth showempty ts `is`) | ||||||
|     let ts = |     let ts = | ||||||
|             [ |             [ | ||||||
|              nulltxn{tdescription="desc",taccount="expenses:food:groceries",tamount=Mixed [dollars 1]} |              nulltxn{tdescription="desc",taccount="expenses:food:groceries",tamount=Mixed [dollars 1]} | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								Utils.hs
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Utils.hs
									
									
									
									
									
								
							| @ -47,5 +47,5 @@ readLedgerWithOpts opts args f = do | |||||||
| -- | Convert a RawLedger to a canonicalised, cached and filtered Ledger | -- | Convert a RawLedger to a canonicalised, cached and filtered Ledger | ||||||
| -- based on the command-line options/arguments and a reference time. | -- based on the command-line options/arguments and a reference time. | ||||||
| filterAndCacheLedgerWithOpts ::  [Opt] -> [String] -> LocalTime -> String -> RawLedger -> Ledger | filterAndCacheLedgerWithOpts ::  [Opt] -> [String] -> LocalTime -> String -> RawLedger -> Ledger | ||||||
| filterAndCacheLedgerWithOpts opts args t = filterAndCacheLedger (optsToFilterSpec opts args t) | filterAndCacheLedgerWithOpts opts args = filterAndCacheLedger . optsToFilterSpec opts args | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -92,16 +92,16 @@ data Opt = File {value::String} | |||||||
| 
 | 
 | ||||||
| -- option value getters. | -- option value getters. | ||||||
| fileopt :: [Opt] -> String | fileopt :: [Opt] -> String | ||||||
| fileopt opts = optValueWithDefault File "bench.tests" opts | fileopt = optValueWithDefault File "bench.tests" | ||||||
| 
 | 
 | ||||||
| precisionopt :: [Opt] -> Int | precisionopt :: [Opt] -> Int | ||||||
| precisionopt opts = read $ optValueWithDefault Prec "2" opts | precisionopt = read . optValueWithDefault Prec "2" | ||||||
| 
 | 
 | ||||||
| numopt :: [Opt] -> Int | numopt :: [Opt] -> Int | ||||||
| numopt opts = read $ optValueWithDefault Num "2" opts | numopt = read . optValueWithDefault Num "2" | ||||||
| 
 | 
 | ||||||
| verboseopt :: [Opt] -> Bool | verboseopt :: [Opt] -> Bool | ||||||
| verboseopt opts = Verbose `elem` opts | verboseopt = (Verbose `elem`) | ||||||
| 
 | 
 | ||||||
| -- options utilities | -- options utilities | ||||||
| parseargs :: [String] -> ([Opt],[String]) | parseargs :: [String] -> ([Opt],[String]) | ||||||
|  | |||||||
| @ -70,7 +70,7 @@ splitDocTest s = (strip $ drop 1 $ strip $ head ls, unlines $ tail ls) | |||||||
| doctests :: String -> [String] | doctests :: String -> [String] | ||||||
| doctests s = filter isDocTest $ haddockLiterals s | doctests s = filter isDocTest $ haddockLiterals s | ||||||
|     where |     where | ||||||
|       isDocTest s = (("$" `isPrefixOf`) . dropws) $ head $ lines s |       isDocTest = (("$" `isPrefixOf`) . dropws) . head . lines | ||||||
| 
 | 
 | ||||||
| -- extract haddock literal blocks from haskell source code | -- extract haddock literal blocks from haskell source code | ||||||
| haddockLiterals :: String -> [String] | haddockLiterals :: String -> [String] | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user