The nice thing is, mapAccumR is not doing much either. It relies completely on the power of Traversable the class that the compiler generated for us. If you would change the type signature of solve to allow for other Traversables than Tree, the code would work without any changes also for lists or arrays for example. All thanks to the power of fundamental abstractions.
I've added a short paragraph that shows that mapAccumR is not a lot of code.
Yes, fixed the
Array.reduceThe nice thing is,
mapAccumRis not doing much either. It relies completely on the power ofTraversablethe class that the compiler generated for us. If you would change the type signature ofsolveto allow for otherTraversables thanTree, the code would work without any changes also for lists or arrays for example. All thanks to the power of fundamental abstractions.I've added a short paragraph that shows that
mapAccumRis not a lot of code.Maybe it would help clear the confusion by mentioning that
derivingcreates functions with certain rules (map, fold, etc.) that operate on the types?