Here's the code:
----
    InputRange!Tree walk()
    {
        return inputRangeObject(chain(
            [this],
            children.map!(a=>a.walk())().joiner()));
    }
----
Result:
---
[root, root.1, root.1.1, root.1.2, root.2, root.2.1, root.2.2]
---

It's a bit confusing to explain how I came up with that, but essentially you have to cleanly terminate the type inference (hence why I used an inputRangeObject) and make sure you map the walk function on all of the children. Mapping on the children creates a range of ranges (essentially, it turns your range of children into a range of results of walking, which are ranges), so you must flatten it into a single range using a join. After that, I prepended the [this] reference using a regular chain similar to what you were doing.

I'm not confident that this is the most efficient way, but it works.

Reply via email to