Phlex wrote:
> This is very informative, and easier to grasp for such a newbie as me.
> So the idea is to take the "changing function" down the chain, i knew
> this couldn't be that hard !
> Still this requires indeed to think different, I guess i'm up for
> quite a few exercises in order to wrap my mind around this.
>
> That's the kind of information that's missing from all these tutorials
> i found around the web.
>
> Thank you,
> Sacha
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>

for what it's worth, i find it easiest to think about it this way:

assume you want to update a planet, i.e. you want to apply
changeP :: Planet -> Planet
to one planet in your system.

the important step is then to invoke wishful thinking (viz. SICP), and
assume you can partition your data structure into two parts, the one
that stays constant, and the one that is changed, i.e.

partition :: Universe -> (Rest, Planet)

with a corresponding inverse operation

recombine :: (Rest, Planet) -> Universe

So after the partitioning, updating the planet of interest is very easy
to accomplish:

changeP' (rest, planet) = (rest, changeP planet)

rolling the partitioning, updating and recombination into one, we get

update u = recombine (changeP' (partition u))

The second step is then to find out how to do the partitioning and
recombination easily and efficiently. For one very generic way to do
this, i would recommend that you read up on the Zipper data structure [1-3].

kind regards,
v.

[1] http://en.wikibooks.org/wiki/Haskell/Zippers
[2]
http://www.st.cs.uni-sb.de/edu/seminare/2005/advanced-fp/docs/huet-zipper.pdf
[3] http://cgi.cse.unsw.edu.au/~dons/blog/2007/05/17#xmonad_part1b_zipper



Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to