[Haskell-cafe] Data.Tree.Zipper in the standard libraries

Conal Elliott conal at conal.net
Thu May 22 17:13:08 EDT 2008

Hi Krasimir,

I had a long exchange with chessguy about this interface, suggesting a
significant change in style, simplifying the type.  (Incidentally, the
change removed the State and hence mtl dependence.)

The conversation is on http://tunes.org/~nef/logs/haskell/08.05.17, starting
with "12:08:11 <chessguy> w00t!" and really picking up with "<conal>
chessguy: something smells funny ...".

Here's a summary of the conversation, though I encourage you to read the
whole thing:

* Every definition of tp 'State (TreeLoc a) a', does a getLabel at the end
(except getLabel).
* Often users of those movement functions discard the result.
* Simpler and more orthogonal would be remove the getLabel and return 'State
(TreeLoc a) ()' instead.
* Now remove that return value altogether, simplifying the type of zipper
movements to just 'TreeLoc a -> TreeLoc a'.  Then they compose nicely with
(.), having id as identity.
* Simplify the type of getLabel to just 'TreeLoc a -> a'.  Now no more

Cheers,  - Conal

On Thu, May 22, 2008 at 12:52 PM, Krasimir Angelov <kr.angelov at gmail.com>

> Hello Guys,
> We have Data.Tree in the standard libraries for a long time but for
> some reason we still don't have standard implementation for Zipper. I
> wrote recently one implementation for Yi but there are many other
> versions hanging around. At least I know for some. I propose to add
> one in the standard libraries i.e. the "containers" package. The
> version that I use currently is here:
> http://code.haskell.org/yi/Data/Tree/Zipper.hs
> If you would like to do code review I will be happy to hear comments.
> After the API is settled down I will write test cases also. One thing
> that is worying me is that the current version uses State monad which
> is in the "mtl" package while the natural place for Data.Tree.Zipper
> is in "containers". This will create an extra dependency. Is this
> acceptable?
> Regards,
>  Krasimir
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20080522/6682c190/attachment.htm

More information about the Haskell-Cafe mailing list