Purely Functional Data Structures (1996) [pdf]
cs.cmu.edu
cs.cmu.edu
Additionally, even if discovery of a certain pure algorithm is difficult, that doesn't mean that using that algorithm (especially one abstracted behind a nice API) is difficult.
There's no doubt that not having aliasing everywhere, and having basic laws available about the behavior of programs and combinators aids in reasoning about programs.
The ease and simplicity of the book's implementations owes to pattern matching syntax more than anything else.
As an aside: pattern matching on algebraic datatypes is awesome, and just like other innovations before, like garbage collection and first-class closures, I hope to see it transplanted to more and more mainstream languages.
So I guess you'd have us all read Aristotle and be arrogant and proud of our state of ignorance?
It's the more complicated optimizations that were PhD work. But designing fast persistent data structures in an imperative setting ain't easier.
(To avoid confusion: `persistent' used here as the opposite of `ephemeral', and without any relation to saving to disk.)