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 State.
Cheers, - Conal
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@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe