[Haskell-cafe] Data.Tree.Zipper in the standard libraries
conal at conal.net
Thu May 22 17:13:08 EDT 2008
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
* Every definition of tp 'State (TreeLoc a) a', does a getLabel at the end
* 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:
> 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
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe