lib: Remove unused Tree functions.

This commit is contained in:
Stephen Morgan 2020-08-15 19:31:56 +10:00
parent 40ca6c62e7
commit ccd6fdd7b9

View File

@ -1,77 +1,18 @@
module Hledger.Utils.Tree where module Hledger.Utils.Tree
( FastTree(..)
, treeFromPaths
) where
-- import Data.Char -- import Data.Char
import Data.List (foldl') import Data.List (foldl')
import qualified Data.Map as M import qualified Data.Map as M
import Data.Tree
-- import Text.Megaparsec
-- import Text.Printf
import Hledger.Utils.Regex
-- import Hledger.Utils.UTF8IOCompat (error')
-- standard tree helpers
root = rootLabel
subs = subForest
branches = subForest
-- | List just the leaf nodes of a tree
leaves :: Tree a -> [a]
leaves (Node v []) = [v]
leaves (Node _ branches) = concatMap leaves branches
-- | get the sub-tree rooted at the first (left-most, depth-first) occurrence
-- of the specified node value
subtreeat :: Eq a => a -> Tree a -> Maybe (Tree a)
subtreeat v t
| root t == v = Just t
| otherwise = subtreeinforest v $ subs t
-- | get the sub-tree for the specified node value in the first tree in
-- forest in which it occurs.
subtreeinforest :: Eq a => a -> [Tree a] -> Maybe (Tree a)
subtreeinforest _ [] = Nothing
subtreeinforest v (t:ts) = case (subtreeat v t) of
Just t' -> Just t'
Nothing -> subtreeinforest v ts
-- | remove all nodes past a certain depth
treeprune :: Int -> Tree a -> Tree a
treeprune 0 t = Node (root t) []
treeprune d t = Node (root t) (map (treeprune $ d-1) $ branches t)
-- | apply f to all tree nodes
treemap :: (a -> b) -> Tree a -> Tree b
treemap f t = Node (f $ root t) (map (treemap f) $ branches t)
-- | remove all subtrees whose nodes do not fulfill predicate
treefilter :: (a -> Bool) -> Tree a -> Tree a
treefilter f t = Node
(root t)
(map (treefilter f) $ filter (treeany f) $ branches t)
-- | is predicate true in any node of tree ?
treeany :: (a -> Bool) -> Tree a -> Bool
treeany f t = f (root t) || any (treeany f) (branches t)
-- treedrop -- remove the leaves which do fulfill predicate.
-- treedropall -- do this repeatedly.
-- | show a compact ascii representation of a tree
showtree :: Show a => Tree a -> String
showtree = unlines . filter (regexMatches "[^ \\|]") . lines . drawTree . treemap show
-- | show a compact ascii representation of a forest
showforest :: Show a => Forest a -> String
showforest = concatMap showtree
-- | An efficient-to-build tree suggested by Cale Gibbard, probably -- | An efficient-to-build tree suggested by Cale Gibbard, probably
-- better than accountNameTreeFrom. -- better than accountNameTreeFrom.
newtype FastTree a = T (M.Map a (FastTree a)) newtype FastTree a = T (M.Map a (FastTree a))
deriving (Show, Eq, Ord) deriving (Show, Eq, Ord)
emptyTree :: FastTree a
emptyTree = T M.empty emptyTree = T M.empty
mergeTrees :: (Ord a) => FastTree a -> FastTree a -> FastTree a mergeTrees :: (Ord a) => FastTree a -> FastTree a -> FastTree a
@ -83,5 +24,3 @@ treeFromPath (x:xs) = T (M.singleton x (treeFromPath xs))
treeFromPaths :: (Ord a) => [[a]] -> FastTree a treeFromPaths :: (Ord a) => [[a]] -> FastTree a
treeFromPaths = foldl' mergeTrees emptyTree . map treeFromPath treeFromPaths = foldl' mergeTrees emptyTree . map treeFromPath