From f1994d5aa80ef704af18f84f254ff477b429d3ad Mon Sep 17 00:00:00 2001 From: Stephen Morgan Date: Sun, 29 Aug 2021 00:15:54 +1000 Subject: [PATCH] pkg!: Remove Hledger.Utils.Tree module. This very small module was only used in Hledger.Data.Account, so the code was moved into that module instead. --- hledger-lib/Hledger/Data/Account.hs | 24 +++++++++++++++++++----- hledger-lib/Hledger/Utils.hs | 4 +--- hledger-lib/Hledger/Utils/Tree.hs | 26 -------------------------- hledger-lib/hledger-lib.cabal | 1 - hledger-lib/package.yaml | 1 - 5 files changed, 20 insertions(+), 36 deletions(-) delete mode 100644 hledger-lib/Hledger/Utils/Tree.hs diff --git a/hledger-lib/Hledger/Data/Account.hs b/hledger-lib/Hledger/Data/Account.hs index 5e4bdb47b..8452c9f89 100644 --- a/hledger-lib/Hledger/Data/Account.hs +++ b/hledger-lib/Hledger/Data/Account.hs @@ -13,18 +13,16 @@ module Hledger.Data.Account where import qualified Data.HashSet as HS import qualified Data.HashMap.Strict as HM -import Data.List (find, sortOn) +import Data.List (find, foldl', sortOn) import Data.List.Extra (groupOn) import qualified Data.Map as M import Data.Ord (Down(..)) import Safe (headMay) -import Text.Printf +import Text.Printf (printf) -import Hledger.Data.AccountName +import Hledger.Data.AccountName (expandAccountName, clipOrEllipsifyAccountName) import Hledger.Data.Amount -import Hledger.Data.Posting () import Hledger.Data.Types -import Hledger.Utils -- deriving instance Show Account @@ -91,6 +89,22 @@ accountTree rootname as = nullacct{aname=rootname, asubs=map (uncurry accountTre ,asubs=map (uncurry accountTree') $ M.assocs m } +-- | An efficient-to-build tree suggested by Cale Gibbard, probably +-- better than accountNameTreeFrom. +newtype FastTree a = T (M.Map a (FastTree a)) + deriving (Show, Eq, Ord) + +mergeTrees :: (Ord a) => FastTree a -> FastTree a -> FastTree a +mergeTrees (T m) (T m') = T (M.unionWith mergeTrees m m') + +treeFromPath :: [a] -> FastTree a +treeFromPath [] = T M.empty +treeFromPath (x:xs) = T (M.singleton x (treeFromPath xs)) + +treeFromPaths :: (Ord a) => [[a]] -> FastTree a +treeFromPaths = foldl' mergeTrees (T M.empty) . map treeFromPath + + -- | Tie the knot so all subaccounts' parents are set correctly. tieAccountParents :: Account -> Account tieAccountParents = tie Nothing diff --git a/hledger-lib/Hledger/Utils.hs b/hledger-lib/Hledger/Utils.hs index 8b1e526fc..c248a6ffd 100644 --- a/hledger-lib/Hledger/Utils.hs +++ b/hledger-lib/Hledger/Utils.hs @@ -4,7 +4,7 @@ Standard imports and utilities which are useful everywhere, or needed low in the module hierarchy. This is the bottom of hledger's module graph. -} -{-# LANGUAGE LambdaCase #-} +{-# LANGUAGE LambdaCase #-} module Hledger.Utils (---- provide these frequently used modules - or not, for clearer api: -- module Control.Monad, @@ -25,7 +25,6 @@ module Hledger.Utils (---- provide these frequently used modules - or not, for c module Hledger.Utils.Text, module Hledger.Utils.Test, module Hledger.Utils.Color, - module Hledger.Utils.Tree, -- Debug.Trace.trace, -- module Data.PPrint, -- the rest need to be done in each module I think @@ -60,7 +59,6 @@ import Hledger.Utils.String import Hledger.Utils.Text import Hledger.Utils.Test import Hledger.Utils.Color -import Hledger.Utils.Tree -- tuples diff --git a/hledger-lib/Hledger/Utils/Tree.hs b/hledger-lib/Hledger/Utils/Tree.hs deleted file mode 100644 index d3bd51f1e..000000000 --- a/hledger-lib/Hledger/Utils/Tree.hs +++ /dev/null @@ -1,26 +0,0 @@ -module Hledger.Utils.Tree -( FastTree(..) -, treeFromPaths -) where - --- import Data.Char -import Data.List (foldl') -import qualified Data.Map as M - --- | An efficient-to-build tree suggested by Cale Gibbard, probably --- better than accountNameTreeFrom. -newtype FastTree a = T (M.Map a (FastTree a)) - deriving (Show, Eq, Ord) - -emptyTree :: FastTree a -emptyTree = T M.empty - -mergeTrees :: (Ord a) => FastTree a -> FastTree a -> FastTree a -mergeTrees (T m) (T m') = T (M.unionWith mergeTrees m m') - -treeFromPath :: [a] -> FastTree a -treeFromPath [] = T M.empty -treeFromPath (x:xs) = T (M.singleton x (treeFromPath xs)) - -treeFromPaths :: (Ord a) => [[a]] -> FastTree a -treeFromPaths = foldl' mergeTrees emptyTree . map treeFromPath diff --git a/hledger-lib/hledger-lib.cabal b/hledger-lib/hledger-lib.cabal index d07931881..aee46a3ad 100644 --- a/hledger-lib/hledger-lib.cabal +++ b/hledger-lib/hledger-lib.cabal @@ -85,7 +85,6 @@ library Hledger.Utils.String Hledger.Utils.Test Hledger.Utils.Text - Hledger.Utils.Tree Text.Tabular.AsciiWide other-modules: Text.Megaparsec.Custom diff --git a/hledger-lib/package.yaml b/hledger-lib/package.yaml index 05e1f7c2f..d9c006aa5 100644 --- a/hledger-lib/package.yaml +++ b/hledger-lib/package.yaml @@ -137,7 +137,6 @@ library: - Hledger.Utils.String - Hledger.Utils.Test - Hledger.Utils.Text - - Hledger.Utils.Tree - Text.Tabular.AsciiWide # other-modules: # - Ledger.Parser.Text