[Haskell-beginners] Re: Question about data structures
Daniel Schoepe
daniel.schoepe at googlemail.com
Wed Nov 24 16:26:39 EST 2010
Russ Abbott <russ.abbott at gmail.com> writes:
> Cool. I wasn't aware of that notation. It doesn't quite get to the
> issue though.
>
> The problem I'm concerned about is the need to define y in the first
> place. If one is chasing through a data structure and finds a need to
> change something buried within it, it seems necessary to rebuild
> everything that includes the changed thing. That is, I can't change
> a component of somethingNew without creating y. The point is there's
> nothing about x that changed, and there may be nothing about (var1 x)
> that changed, and there may be nothing about var11 . var1 $ x that
> changed, etc. Yet one is apparently forced to keep track of and
> reconstruct all those elements.
>
The data-accessor package makes those changes more syntactically
lightweight:
http://hackage.haskell.org/package/data-accessor
http://hackage.haskell.org/package/data-accessor-template
> Another example is to imagine a Tree in which the leaves contain
> "objects." If I want to change a property of one of those leaf
> objects, I am forced to rebuild all the ancestor nodes of that leaf
> down to rebuilding the root.
You could define a function like mapTree, or mapLeaves along with the
data structure, that recurses over the tree and applies a function to
its components. This also allows changing a leaf without going through
the entire tree manually:
> mapLeaves (\leaf -> if leaf == wantedLeaf then modifiedLeaf else leaf) tree
If you're concerned about memory usage when "rebuilding" the data
structures, Daniel Fischer's previous statements still apply: The
modified data structure will share everything with the old one except
for the changed parts.
Regards,
Daniel
More information about the Beginners
mailing list