Fellow (?) functional programmer here. I would generally use a recursive descent algorithm on a tree. That's the natural approach, yes? But the entire point of the article was that if you use a streaming approach you can get some performance benefits.
I would say it's not totally trivial in most languages, and that it's slightly more extra work in functional languages.