Use nubSort instead of nub . sort.
This commit is contained in:
parent
390cea7f7c
commit
74778efcf5
@ -41,6 +41,7 @@ module Hledger.Data.AccountName (
|
|||||||
where
|
where
|
||||||
|
|
||||||
import Data.List
|
import Data.List
|
||||||
|
import Data.List.Extra (nubSort)
|
||||||
#if !(MIN_VERSION_base(4,11,0))
|
#if !(MIN_VERSION_base(4,11,0))
|
||||||
import Data.Monoid
|
import Data.Monoid
|
||||||
#endif
|
#endif
|
||||||
@ -110,7 +111,7 @@ accountNameDrop n a
|
|||||||
-- ie these plus all their parent accounts up to the root.
|
-- ie these plus all their parent accounts up to the root.
|
||||||
-- Eg: ["a:b:c","d:e"] -> ["a","a:b","a:b:c","d","d:e"]
|
-- Eg: ["a:b:c","d:e"] -> ["a","a:b","a:b:c","d","d:e"]
|
||||||
expandAccountNames :: [AccountName] -> [AccountName]
|
expandAccountNames :: [AccountName] -> [AccountName]
|
||||||
expandAccountNames as = nub $ sort $ concatMap expandAccountName as
|
expandAccountNames as = nubSort $ concatMap expandAccountName as
|
||||||
|
|
||||||
-- | "a:b:c" -> ["a","a:b","a:b:c"]
|
-- | "a:b:c" -> ["a","a:b","a:b:c"]
|
||||||
expandAccountName :: AccountName -> [AccountName]
|
expandAccountName :: AccountName -> [AccountName]
|
||||||
|
|||||||
@ -95,7 +95,7 @@ import Data.Function ((&))
|
|||||||
import Data.Functor.Identity (Identity(..))
|
import Data.Functor.Identity (Identity(..))
|
||||||
import qualified Data.HashTable.ST.Cuckoo as H
|
import qualified Data.HashTable.ST.Cuckoo as H
|
||||||
import Data.List
|
import Data.List
|
||||||
import Data.List.Extra (groupSort)
|
import Data.List.Extra (groupSort, nubSort)
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
#if !(MIN_VERSION_base(4,11,0))
|
#if !(MIN_VERSION_base(4,11,0))
|
||||||
@ -258,7 +258,7 @@ journalPrevTransaction j t = journalTransactionAt j (tindex t - 1)
|
|||||||
|
|
||||||
-- | Unique transaction descriptions used in this journal.
|
-- | Unique transaction descriptions used in this journal.
|
||||||
journalDescriptions :: Journal -> [Text]
|
journalDescriptions :: Journal -> [Text]
|
||||||
journalDescriptions = nub . sort . map tdescription . jtxns
|
journalDescriptions = nubSort . map tdescription . jtxns
|
||||||
|
|
||||||
-- | All postings from this journal's transactions, in order.
|
-- | All postings from this journal's transactions, in order.
|
||||||
journalPostings :: Journal -> [Posting]
|
journalPostings :: Journal -> [Posting]
|
||||||
@ -275,17 +275,17 @@ journalAccountNamesImplied = expandAccountNames . journalAccountNamesUsed
|
|||||||
|
|
||||||
-- | Sorted unique account names declared by account directives in this journal.
|
-- | Sorted unique account names declared by account directives in this journal.
|
||||||
journalAccountNamesDeclared :: Journal -> [AccountName]
|
journalAccountNamesDeclared :: Journal -> [AccountName]
|
||||||
journalAccountNamesDeclared = nub . sort . map fst . jdeclaredaccounts
|
journalAccountNamesDeclared = nubSort . map fst . jdeclaredaccounts
|
||||||
|
|
||||||
-- | Sorted unique account names declared by account directives or posted to
|
-- | Sorted unique account names declared by account directives or posted to
|
||||||
-- by transactions in this journal.
|
-- by transactions in this journal.
|
||||||
journalAccountNamesDeclaredOrUsed :: Journal -> [AccountName]
|
journalAccountNamesDeclaredOrUsed :: Journal -> [AccountName]
|
||||||
journalAccountNamesDeclaredOrUsed j = nub $ sort $ journalAccountNamesDeclared j ++ journalAccountNamesUsed j
|
journalAccountNamesDeclaredOrUsed j = nubSort $ journalAccountNamesDeclared j ++ journalAccountNamesUsed j
|
||||||
|
|
||||||
-- | Sorted unique account names declared by account directives, or posted to
|
-- | Sorted unique account names declared by account directives, or posted to
|
||||||
-- or implied as parents by transactions in this journal.
|
-- or implied as parents by transactions in this journal.
|
||||||
journalAccountNamesDeclaredOrImplied :: Journal -> [AccountName]
|
journalAccountNamesDeclaredOrImplied :: Journal -> [AccountName]
|
||||||
journalAccountNamesDeclaredOrImplied j = nub $ sort $ journalAccountNamesDeclared j ++ journalAccountNamesImplied j
|
journalAccountNamesDeclaredOrImplied j = nubSort $ journalAccountNamesDeclared j ++ journalAccountNamesImplied j
|
||||||
|
|
||||||
-- | Convenience/compatibility alias for journalAccountNamesDeclaredOrImplied.
|
-- | Convenience/compatibility alias for journalAccountNamesDeclaredOrImplied.
|
||||||
journalAccountNames :: Journal -> [AccountName]
|
journalAccountNames :: Journal -> [AccountName]
|
||||||
|
|||||||
@ -69,7 +69,7 @@ module Hledger.Data.Posting (
|
|||||||
where
|
where
|
||||||
|
|
||||||
import Data.Foldable (asum)
|
import Data.Foldable (asum)
|
||||||
import Data.List
|
import Data.List.Extra (nubSort)
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.MemoUgly (memo)
|
import Data.MemoUgly (memo)
|
||||||
@ -190,7 +190,7 @@ hasBalanceAssignment p = not (hasAmount p) && isJust (pbalanceassertion p)
|
|||||||
|
|
||||||
-- | Sorted unique account names referenced by these postings.
|
-- | Sorted unique account names referenced by these postings.
|
||||||
accountNamesFromPostings :: [Posting] -> [AccountName]
|
accountNamesFromPostings :: [Posting] -> [AccountName]
|
||||||
accountNamesFromPostings = nub . sort . map paccount
|
accountNamesFromPostings = nubSort . map paccount
|
||||||
|
|
||||||
sumPostings :: [Posting] -> MixedAmount
|
sumPostings :: [Posting] -> MixedAmount
|
||||||
sumPostings = sumStrict . map pamount
|
sumPostings = sumStrict . map pamount
|
||||||
|
|||||||
@ -11,6 +11,7 @@ where
|
|||||||
|
|
||||||
import Data.Decimal
|
import Data.Decimal
|
||||||
import Data.List
|
import Data.List
|
||||||
|
import Data.List.Extra (nubSort)
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
#if !(MIN_VERSION_base(4,11,0))
|
#if !(MIN_VERSION_base(4,11,0))
|
||||||
import Data.Monoid ((<>))
|
import Data.Monoid ((<>))
|
||||||
@ -202,7 +203,7 @@ combineBudgetAndActual
|
|||||||
(MultiBalanceReport (budgetperiods, budgetrows, (budgettots, budgetgrandtot, budgetgrandavg)))
|
(MultiBalanceReport (budgetperiods, budgetrows, (budgettots, budgetgrandtot, budgetgrandavg)))
|
||||||
(MultiBalanceReport (actualperiods, actualrows, (actualtots, actualgrandtot, actualgrandavg))) =
|
(MultiBalanceReport (actualperiods, actualrows, (actualtots, actualgrandtot, actualgrandavg))) =
|
||||||
let
|
let
|
||||||
periods = nub $ sort $ filter (/= nulldatespan) $ budgetperiods ++ actualperiods
|
periods = nubSort $ filter (/= nulldatespan) $ budgetperiods ++ actualperiods
|
||||||
|
|
||||||
-- first, combine any corresponding budget goals with actual changes
|
-- first, combine any corresponding budget goals with actual changes
|
||||||
rows1 =
|
rows1 =
|
||||||
|
|||||||
@ -24,6 +24,7 @@ where
|
|||||||
import GHC.Generics (Generic)
|
import GHC.Generics (Generic)
|
||||||
import Control.DeepSeq (NFData)
|
import Control.DeepSeq (NFData)
|
||||||
import Data.List
|
import Data.List
|
||||||
|
import Data.List.Extra (nubSort)
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Ord
|
import Data.Ord
|
||||||
@ -235,7 +236,7 @@ multiBalanceReportWith ropts@ReportOpts{..} q j priceoracle =
|
|||||||
(if tree_ ropts then expandAccountNames else id) $
|
(if tree_ ropts then expandAccountNames else id) $
|
||||||
nub $ map (clipOrEllipsifyAccountName depth) $
|
nub $ map (clipOrEllipsifyAccountName depth) $
|
||||||
if empty_ || balancetype_ == HistoricalBalance
|
if empty_ || balancetype_ == HistoricalBalance
|
||||||
then nub $ sort $ startaccts ++ allpostedaccts
|
then nubSort $ startaccts ++ allpostedaccts
|
||||||
else allpostedaccts
|
else allpostedaccts
|
||||||
where
|
where
|
||||||
allpostedaccts :: [AccountName] =
|
allpostedaccts :: [AccountName] =
|
||||||
|
|||||||
@ -23,8 +23,8 @@ module Hledger.Reports.PostingsReport (
|
|||||||
where
|
where
|
||||||
|
|
||||||
import Data.List
|
import Data.List
|
||||||
|
import Data.List.Extra (nubSort)
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Ord (comparing)
|
|
||||||
-- import Data.Text (Text)
|
-- import Data.Text (Text)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Data.Time.Calendar
|
import Data.Time.Calendar
|
||||||
@ -166,7 +166,7 @@ matchedPostingsBeforeAndDuring opts q j (DateSpan mstart mend) =
|
|||||||
where
|
where
|
||||||
beforestartq = dbg1 "beforestartq" $ dateqtype $ DateSpan Nothing mstart
|
beforestartq = dbg1 "beforestartq" $ dateqtype $ DateSpan Nothing mstart
|
||||||
beforeandduringps =
|
beforeandduringps =
|
||||||
dbg1 "ps5" $ sortBy (comparing sortdate) $ -- sort postings by date or date2
|
dbg1 "ps5" $ sortOn sortdate $ -- sort postings by date or date2
|
||||||
dbg1 "ps4" $ (if invert_ opts then map negatePostingAmount else id) $ -- with --invert, invert amounts
|
dbg1 "ps4" $ (if invert_ opts then map negatePostingAmount else id) $ -- with --invert, invert amounts
|
||||||
dbg1 "ps3" $ map (filterPostingAmount symq) $ -- remove amount parts which the query's cur: terms would exclude
|
dbg1 "ps3" $ map (filterPostingAmount symq) $ -- remove amount parts which the query's cur: terms would exclude
|
||||||
dbg1 "ps2" $ (if related_ opts then concatMap relatedPostings else id) $ -- with -r, replace each with its sibling postings
|
dbg1 "ps2" $ (if related_ opts then concatMap relatedPostings else id) $ -- with -r, replace each with its sibling postings
|
||||||
@ -254,7 +254,7 @@ summarisePostingsInDateSpan (DateSpan b e) wd depth showempty ps
|
|||||||
summaryps | depth > 0 = [summaryp{paccount=a,pamount=balance a} | a <- clippedanames]
|
summaryps | depth > 0 = [summaryp{paccount=a,pamount=balance a} | a <- clippedanames]
|
||||||
| otherwise = [summaryp{paccount="...",pamount=sum $ map pamount ps}]
|
| otherwise = [summaryp{paccount="...",pamount=sum $ map pamount ps}]
|
||||||
summarypes = map (, e') $ (if showempty then id else filter (not . isZeroMixedAmount . pamount)) summaryps
|
summarypes = map (, e') $ (if showempty then id else filter (not . isZeroMixedAmount . pamount)) summaryps
|
||||||
anames = sort $ nub $ map paccount ps
|
anames = nubSort $ map paccount ps
|
||||||
-- aggregate balances by account, like ledgerFromJournal, then do depth-clipping
|
-- aggregate balances by account, like ledgerFromJournal, then do depth-clipping
|
||||||
accts = accountsFromPostings ps
|
accts = accountsFromPostings ps
|
||||||
balance a = maybe nullmixedamt bal $ lookupAccount a accts
|
balance a = maybe nullmixedamt bal $ lookupAccount a accts
|
||||||
|
|||||||
@ -46,7 +46,7 @@ where
|
|||||||
|
|
||||||
import Control.Applicative ((<|>))
|
import Control.Applicative ((<|>))
|
||||||
import Data.Data (Data)
|
import Data.Data (Data)
|
||||||
import Data.List
|
import Data.List.Extra (nubSort)
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Data.Typeable (Typeable)
|
import Data.Typeable (Typeable)
|
||||||
@ -337,7 +337,7 @@ simplifyStatuses l
|
|||||||
| length l' >= numstatuses = []
|
| length l' >= numstatuses = []
|
||||||
| otherwise = l'
|
| otherwise = l'
|
||||||
where
|
where
|
||||||
l' = nub $ sort l
|
l' = nubSort l
|
||||||
numstatuses = length [minBound .. maxBound :: Status]
|
numstatuses = length [minBound .. maxBound :: Status]
|
||||||
|
|
||||||
-- | Add/remove this status from the status list. Used by hledger-ui.
|
-- | Add/remove this status from the status list. Used by hledger-ui.
|
||||||
|
|||||||
@ -22,6 +22,7 @@ module Hledger.Reports.TransactionsReport (
|
|||||||
where
|
where
|
||||||
|
|
||||||
import Data.List
|
import Data.List
|
||||||
|
import Data.List.Extra (nubSort)
|
||||||
import Data.Ord
|
import Data.Ord
|
||||||
|
|
||||||
import Hledger.Data
|
import Hledger.Data
|
||||||
@ -79,7 +80,7 @@ transactionsReportByCommodity tr =
|
|||||||
[(c, filterTransactionsReportByCommodity c tr) | c <- transactionsReportCommodities tr]
|
[(c, filterTransactionsReportByCommodity c tr) | c <- transactionsReportCommodities tr]
|
||||||
where
|
where
|
||||||
transactionsReportCommodities (_,items) =
|
transactionsReportCommodities (_,items) =
|
||||||
nub $ sort $ map acommodity $ concatMap (amounts . triAmount) items
|
nubSort . map acommodity $ concatMap (amounts . triAmount) items
|
||||||
|
|
||||||
-- Remove transaction report items and item amount (and running
|
-- Remove transaction report items and item amount (and running
|
||||||
-- balance amount) components that don't involve the specified
|
-- balance amount) components that don't involve the specified
|
||||||
|
|||||||
@ -21,6 +21,7 @@ import Data.Default (def)
|
|||||||
#endif
|
#endif
|
||||||
-- import Data.Monoid --
|
-- import Data.Monoid --
|
||||||
import Data.List
|
import Data.List
|
||||||
|
import Data.List.Extra (nubSort)
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
-- import Data.Text (Text)
|
-- import Data.Text (Text)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
@ -205,7 +206,7 @@ runBrickUi uopts@UIOpts{cliopts_=copts@CliOpts{inputopts_=_iopts,reportopts_=rop
|
|||||||
withManager $ \mgr -> do
|
withManager $ \mgr -> do
|
||||||
dbg1IO "fsnotify using polling ?" $ isPollingManager mgr
|
dbg1IO "fsnotify using polling ?" $ isPollingManager mgr
|
||||||
files <- mapM (canonicalizePath . fst) $ jfiles j
|
files <- mapM (canonicalizePath . fst) $ jfiles j
|
||||||
let directories = nub $ sort $ map takeDirectory files
|
let directories = nubSort $ map takeDirectory files
|
||||||
dbg1IO "files" files
|
dbg1IO "files" files
|
||||||
dbg1IO "directories to watch" directories
|
dbg1IO "directories to watch" directories
|
||||||
|
|
||||||
|
|||||||
@ -74,6 +74,7 @@ executable hledger-ui
|
|||||||
, containers
|
, containers
|
||||||
, data-default
|
, data-default
|
||||||
, directory
|
, directory
|
||||||
|
, extra >=1.6.3
|
||||||
, filepath
|
, filepath
|
||||||
, fsnotify >=0.2.1.2 && <0.4
|
, fsnotify >=0.2.1.2 && <0.4
|
||||||
, hledger >=1.16.1 && <1.17
|
, hledger >=1.16.1 && <1.17
|
||||||
|
|||||||
@ -50,6 +50,7 @@ dependencies:
|
|||||||
- containers
|
- containers
|
||||||
- data-default
|
- data-default
|
||||||
- directory
|
- directory
|
||||||
|
- extra >=1.6.3
|
||||||
- filepath
|
- filepath
|
||||||
- fsnotify >=0.2.1.2 && <0.4
|
- fsnotify >=0.2.1.2 && <0.4
|
||||||
- microlens >=0.4
|
- microlens >=0.4
|
||||||
|
|||||||
@ -13,7 +13,8 @@ module Hledger.Web.Widget.AddForm
|
|||||||
|
|
||||||
import Control.Monad.State.Strict (evalStateT)
|
import Control.Monad.State.Strict (evalStateT)
|
||||||
import Data.Bifunctor (first)
|
import Data.Bifunctor (first)
|
||||||
import Data.List (dropWhileEnd, intercalate, nub, sort, unfoldr)
|
import Data.List (dropWhileEnd, intercalate, unfoldr)
|
||||||
|
import Data.List.Extra (nubSort)
|
||||||
import Data.Maybe (isJust)
|
import Data.Maybe (isJust)
|
||||||
#if !(MIN_VERSION_base(4,13,0))
|
#if !(MIN_VERSION_base(4,13,0))
|
||||||
import Data.Semigroup ((<>))
|
import Data.Semigroup ((<>))
|
||||||
@ -71,7 +72,7 @@ addForm j today = identifyForm "add" $ \extra -> do
|
|||||||
let (postRes, displayRows) = validatePostings acctRes amtRes
|
let (postRes, displayRows) = validatePostings acctRes amtRes
|
||||||
|
|
||||||
-- bindings used in add-form.hamlet
|
-- bindings used in add-form.hamlet
|
||||||
let descriptions = sort $ nub $ tdescription <$> jtxns j
|
let descriptions = nubSort $ tdescription <$> jtxns j
|
||||||
journals = fst <$> jfiles j
|
journals = fst <$> jfiles j
|
||||||
|
|
||||||
pure (validateTransaction dateRes descRes postRes, $(widgetFile "add-form"))
|
pure (validateTransaction dateRes descRes postRes, $(widgetFile "add-form"))
|
||||||
|
|||||||
@ -166,6 +166,7 @@ library
|
|||||||
, containers
|
, containers
|
||||||
, data-default
|
, data-default
|
||||||
, directory
|
, directory
|
||||||
|
, extra >=1.6.3
|
||||||
, filepath
|
, filepath
|
||||||
, hjsmin
|
, hjsmin
|
||||||
, hledger >=1.16.1 && <1.17
|
, hledger >=1.16.1 && <1.17
|
||||||
|
|||||||
@ -112,6 +112,7 @@ library:
|
|||||||
- data-default
|
- data-default
|
||||||
- Decimal
|
- Decimal
|
||||||
- directory
|
- directory
|
||||||
|
- extra >=1.6.3
|
||||||
- filepath
|
- filepath
|
||||||
- hjsmin
|
- hjsmin
|
||||||
- http-conduit
|
- http-conduit
|
||||||
|
|||||||
@ -75,6 +75,7 @@ import Data.Char
|
|||||||
import Data.Default
|
import Data.Default
|
||||||
import Data.Functor.Identity (Identity)
|
import Data.Functor.Identity (Identity)
|
||||||
import "base-compat-batteries" Data.List.Compat
|
import "base-compat-batteries" Data.List.Compat
|
||||||
|
import Data.List.Extra (nubSort)
|
||||||
import Data.List.Split (splitOneOf)
|
import Data.List.Split (splitOneOf)
|
||||||
import Data.Ord
|
import Data.Ord
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
@ -661,7 +662,7 @@ likelyExecutablesInPath :: IO [String]
|
|||||||
likelyExecutablesInPath = do
|
likelyExecutablesInPath = do
|
||||||
pathdirs <- splitOneOf "[:;]" `fmap` getEnvSafe "PATH"
|
pathdirs <- splitOneOf "[:;]" `fmap` getEnvSafe "PATH"
|
||||||
pathfiles <- concat `fmap` mapM getDirectoryContentsSafe pathdirs
|
pathfiles <- concat `fmap` mapM getDirectoryContentsSafe pathdirs
|
||||||
return $ nub $ sort pathfiles
|
return $ nubSort pathfiles
|
||||||
-- exclude directories and files without execute permission.
|
-- exclude directories and files without execute permission.
|
||||||
-- These will do a stat for each hledger-*, probably ok.
|
-- These will do a stat for each hledger-*, probably ok.
|
||||||
-- But they need paths, not just filenames
|
-- But they need paths, not just filenames
|
||||||
|
|||||||
@ -8,6 +8,7 @@ where
|
|||||||
|
|
||||||
import Data.Function
|
import Data.Function
|
||||||
import Data.List
|
import Data.List
|
||||||
|
import Data.List.Extra (nubSort)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Hledger
|
import Hledger
|
||||||
import Hledger.Cli.CliOptions
|
import Hledger.Cli.CliOptions
|
||||||
@ -28,7 +29,7 @@ accountsNames :: Journal -> [(String, AccountName)]
|
|||||||
accountsNames j = map leafAndAccountName as
|
accountsNames j = map leafAndAccountName as
|
||||||
where leafAndAccountName a = (T.unpack $ accountLeafName a, a)
|
where leafAndAccountName a = (T.unpack $ accountLeafName a, a)
|
||||||
ps = journalPostings j
|
ps = journalPostings j
|
||||||
as = nub $ sort $ map paccount ps
|
as = nubSort $ map paccount ps
|
||||||
|
|
||||||
checkdupes' :: (Ord k, Eq k) => [(k, v)] -> [(k, [v])]
|
checkdupes' :: (Ord k, Eq k) => [(k, v)] -> [(k, [v])]
|
||||||
checkdupes' l = zip dupLeafs dupAccountNames
|
checkdupes' l = zip dupLeafs dupAccountNames
|
||||||
|
|||||||
@ -13,7 +13,7 @@ module Hledger.Cli.Commands.Commodities (
|
|||||||
) where
|
) where
|
||||||
|
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Data.List
|
import Data.List.Extra (nubSort)
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import qualified Data.Text.IO as T
|
import qualified Data.Text.IO as T
|
||||||
|
|
||||||
@ -32,5 +32,5 @@ commoditiesmode = hledgerCommandMode
|
|||||||
commodities :: CliOpts -> Journal -> IO ()
|
commodities :: CliOpts -> Journal -> IO ()
|
||||||
commodities _copts j = do
|
commodities _copts j = do
|
||||||
let cs = filter (/= "AUTO") $
|
let cs = filter (/= "AUTO") $
|
||||||
nub $ sort $ M.keys (jcommodities j) ++ M.keys (jinferredcommodities j)
|
nubSort $ M.keys (jcommodities j) ++ M.keys (jinferredcommodities j)
|
||||||
forM_ cs T.putStrLn
|
forM_ cs T.putStrLn
|
||||||
|
|||||||
@ -14,7 +14,7 @@ module Hledger.Cli.Commands.Descriptions (
|
|||||||
,descriptions
|
,descriptions
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Data.List
|
import Data.List.Extra (nubSort)
|
||||||
import qualified Data.Text.IO as T
|
import qualified Data.Text.IO as T
|
||||||
|
|
||||||
import Hledger
|
import Hledger
|
||||||
@ -35,6 +35,6 @@ descriptions CliOpts{reportopts_=ropts} j = do
|
|||||||
d <- getCurrentDay
|
d <- getCurrentDay
|
||||||
let q = queryFromOpts d ropts
|
let q = queryFromOpts d ropts
|
||||||
ts = entriesReport ropts q j
|
ts = entriesReport ropts q j
|
||||||
descriptions = nub $ sort $ map tdescription ts
|
descriptions = nubSort $ map tdescription ts
|
||||||
|
|
||||||
mapM_ T.putStrLn descriptions
|
mapM_ T.putStrLn descriptions
|
||||||
|
|||||||
@ -15,7 +15,7 @@ module Hledger.Cli.Commands.Notes (
|
|||||||
,notes
|
,notes
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Data.List
|
import Data.List.Extra (nubSort)
|
||||||
import qualified Data.Text.IO as T
|
import qualified Data.Text.IO as T
|
||||||
|
|
||||||
import Hledger
|
import Hledger
|
||||||
@ -36,6 +36,6 @@ notes CliOpts{reportopts_=ropts} j = do
|
|||||||
d <- getCurrentDay
|
d <- getCurrentDay
|
||||||
let q = queryFromOpts d ropts
|
let q = queryFromOpts d ropts
|
||||||
ts = entriesReport ropts q j
|
ts = entriesReport ropts q j
|
||||||
notes = nub $ sort $ map transactionNote ts
|
notes = nubSort $ map transactionNote ts
|
||||||
|
|
||||||
mapM_ T.putStrLn notes
|
mapM_ T.putStrLn notes
|
||||||
|
|||||||
@ -15,7 +15,7 @@ module Hledger.Cli.Commands.Payees (
|
|||||||
,payees
|
,payees
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Data.List
|
import Data.List.Extra (nubSort)
|
||||||
import qualified Data.Text.IO as T
|
import qualified Data.Text.IO as T
|
||||||
|
|
||||||
import Hledger
|
import Hledger
|
||||||
@ -36,6 +36,6 @@ payees CliOpts{reportopts_=ropts} j = do
|
|||||||
d <- getCurrentDay
|
d <- getCurrentDay
|
||||||
let q = queryFromOpts d ropts
|
let q = queryFromOpts d ropts
|
||||||
ts = entriesReport ropts q j
|
ts = entriesReport ropts q j
|
||||||
payees = nub $ sort $ map transactionPayee ts
|
payees = nubSort $ map transactionPayee ts
|
||||||
|
|
||||||
mapM_ T.putStrLn payees
|
mapM_ T.putStrLn payees
|
||||||
|
|||||||
@ -6,7 +6,7 @@ module Hledger.Cli.Commands.Printunique (
|
|||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
import Data.List
|
import Data.List.Extra (nubSortOn)
|
||||||
import Hledger
|
import Hledger
|
||||||
import Hledger.Cli.CliOptions
|
import Hledger.Cli.CliOptions
|
||||||
import Hledger.Cli.Commands.Print
|
import Hledger.Cli.Commands.Print
|
||||||
@ -21,6 +21,6 @@ printuniquemode = hledgerCommandMode
|
|||||||
printunique opts j@Journal{jtxns=ts} = do
|
printunique opts j@Journal{jtxns=ts} = do
|
||||||
print' opts j{jtxns=uniquify ts}
|
print' opts j{jtxns=uniquify ts}
|
||||||
where
|
where
|
||||||
uniquify = nubBy (\t1 t2 -> thingToCompare t1 == thingToCompare t2) . sortOn thingToCompare
|
uniquify = nubSortOn thingToCompare
|
||||||
thingToCompare = tdescription
|
thingToCompare = tdescription
|
||||||
-- thingToCompare = tdate
|
-- thingToCompare = tdate
|
||||||
|
|||||||
@ -14,6 +14,7 @@ module Hledger.Cli.Commands.Stats (
|
|||||||
where
|
where
|
||||||
|
|
||||||
import Data.List
|
import Data.List
|
||||||
|
import Data.List.Extra (nubSort)
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Ord
|
import Data.Ord
|
||||||
import Data.HashSet (size, fromList)
|
import Data.HashSet (size, fromList)
|
||||||
@ -108,4 +109,4 @@ showLedgerStats l today span =
|
|||||||
acctdepth | null as = 0
|
acctdepth | null as = 0
|
||||||
| otherwise = maximum $ map accountNameLevel as
|
| otherwise = maximum $ map accountNameLevel as
|
||||||
mktprices = jpricedirectives j
|
mktprices = jpricedirectives j
|
||||||
mktpricecommodities = nub $ sort $ map pdcommodity mktprices
|
mktpricecommodities = nubSort $ map pdcommodity mktprices
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user