Hi Krasimir,<br><br>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.)<br><br>The conversation is on <a href="http://tunes.org/~nef/logs/haskell/08.05.17">http://tunes.org/~nef/logs/haskell/08.05.17</a>, starting with "12:08:11 <chessguy> w00t!" and really picking up with "<conal> chessguy: something smells funny ...".<br>
<br>Here's a summary of the conversation, though I encourage you to read the whole thing:<br><br>* Every definition of tp 'State (TreeLoc a) a', does a getLabel at the end (except getLabel).<br>* Often users of those movement functions discard the result.<br>
* Simpler and more orthogonal would be remove the getLabel and return 'State (TreeLoc a) ()' instead.<br>* 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.<br>
* Simplify the type of getLabel to just 'TreeLoc a -> a'. Now no more State.<br><br>Cheers, - Conal<br><br><br><div class="gmail_quote">On Thu, May 22, 2008 at 12:52 PM, Krasimir Angelov <<a href="mailto:kr.angelov@gmail.com">kr.angelov@gmail.com</a>> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hello Guys,<br>
<br>
We have Data.Tree in the standard libraries for a long time but for<br>
some reason we still don't have standard implementation for Zipper. I<br>
wrote recently one implementation for Yi but there are many other<br>
versions hanging around. At least I know for some. I propose to add<br>
one in the standard libraries i.e. the "containers" package. The<br>
version that I use currently is here:<br>
<br>
<a href="http://code.haskell.org/yi/Data/Tree/Zipper.hs" target="_blank">http://code.haskell.org/yi/Data/Tree/Zipper.hs</a><br>
<br>
If you would like to do code review I will be happy to hear comments.<br>
After the API is settled down I will write test cases also. One thing<br>
that is worying me is that the current version uses State monad which<br>
is in the "mtl" package while the natural place for Data.Tree.Zipper<br>
is in "containers". This will create an extra dependency. Is this<br>
acceptable?<br>
<br>
Regards,<br>
Krasimir<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div><br>