No, it's a good point. Let me explain.

If builtBody is a function, then it may be called multiple times. Since it can be a very expensive call, we should be caching it after the first calculation.

If builtBody is a val, then every node in the tree will create a stringbuilder, and append all subelements to its own stringbuilder. This is one of the 2 items I was specifically trying to avoid with this pull request.

What's left is a lazy val or a function that does what a lazy val does. I found in many benchmarks that the lazy val does not affect performance, so I left it.