
Hey,
So, proposal 2.0, with the received feedback:
-- | get the sub-tree rooted at the first (left-most, depth-first) occurrence
-- of the specified node value
lookupTree :: Eq a => a -> Tree a -> Maybe (Tree a)
-- | get the sub-tree rooted at the first (left-most, depth-first) value that
-- matches the provided condition
findTree :: (a -> Bool) -> Tree a -> Maybe (Tree a)
-- | get the sub-tree for the specified node value in the first tree in
-- forest in which it occurs.
lookupTreeInForest :: Eq a => a -> [Tree a] -> Maybe (Tree a)
-- | keep only the elements that match the provided condition
filter :: (a -> Bool) -> Tree a -> Tree a
-- | Size of the (flattened) tree
size :: Tree a -> Int
size = getSum . F.foldMap (const $ Sum 1)
-- | Maximum depth of tree
maxDepth :: Tree a -> Int
-- | Remove all nodes past a certain depth
prune :: Int -> Tree a -> Tree a
-- | Take the mirror-image of a tree
mirror :: Tree a -> Tree a
mirror (Node a ts) = Node a . reverse $ map mirror ts
Any additions / comments?
Thanks,
João
2014-02-24 12:55 GMT+00:00 João Cristóvão
Hi Ivan,
then what about the arguably better name `size`? Huh, I thought we already had that.
We do? If there is consensus I would then add `size` with the arguably more efficient implementation: size :: Tree a -> Int size = getSum . F.foldMap (const $ Sum 1)
* An Ord instance (achievable via standalone deriving, though this isn't ideal)
Agreed.
* Functions to take/drop so many levels of the tree (take is relatively easy; drop would result in a Forest).
Similar to treeprune in http://hackage.haskell.org/package/hledger-lib-0.22.1/docs/Hledger-Utils.htm... ?
mirror :: Tree a -> Tree a mirror (Node a ts) = Node a . reverse $ map mirror ts
I don't have strong feeling about this one, but if more people see as useful, why not...
João
2014-02-24 11:38 GMT+00:00 Ivan Lazar Miljenovic
: On 24 February 2014 22:17, Tobias Florek
wrote: hi,
But to be honest, I don't have strong feelings about this, I'm willing to drop this particular function (length) from the proposal, if there is no consensus.
then what about the arguably better name `size`?
Huh, I thought we already had that.
Some things I missed when I last used Data.Tree:
* An Ord instance (achievable via standalone deriving, though this isn't ideal)
* A function to take the mirror-image of a tree (name not that important):
mirror :: Tree a -> Tree a mirror (Node a ts) = Node a . reverse $ map mirror ts
* Functions to take/drop so many levels of the tree (take is relatively easy; drop would result in a Forest).
cheers, tobias florek
_______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries
-- Ivan Lazar Miljenovic Ivan.Miljenovic@gmail.com http://IvanMiljenovic.wordpress.com _______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries