[Haskell-cafe] Tree Semantics and efficiency
Antoine Latter
aslatter at gmail.com
Wed Jun 17 10:38:12 EDT 2009
On Wed, Jun 17, 2009 at 9:24 AM, Miguel Mitrofanov<miguelimo38 at yandex.ru> wrote:
> You can use the standart "tying the knot"-technique. For example:
>
> data Tree = TreeNode String (Maybe Tree) [Tree] -- what's the parent of the
> root node?
>
> test :: Tree
> test =
> let parent = TreeNode "I'm parent" Nothing [child1, child2]
> child1 = TreeNode "I'm child1" (Just parent) []
> child2 = TreeNode "I'm child2" (Just parent) []
> in parent
>
> But there are other possibilities worth considering. Zippers, for example,
> would be likely useful.
The advantage zippers have over knot-tying is that I can create
updates of zipper-viewed data structures.
It looks like there's already something on HAckage for this:
http://hackage.haskell.org/packages/archive/rosezipper/0.1/doc/html/Data-Tree-Zipper.html
The idea is that you can use the following function to created the
zipper-view of your tree:
> fromTree :: Tree a -> TreeLoc a
and then use the functions on 'TreeLoc' types to traverse and modify
the tree, and then call
> toTree :: TreeLoc a -> Tree a
to go back to the 'Tree a' representation of your data.
Antoine
More information about the Haskell-Cafe
mailing list