search function
Implementation
Iterable<Element> search(
Iterable<Element> root,
bool Function(Element) predicate,
) =>
[
[root.where(predicate)],
root.map((e) => search(e.children, predicate))
].reduce((v, e) => [...v, ...e]).reduce((v, e) => [...v, ...e]);