Use `productIterator` instead of `Tree.children`
Support `@unchecked` annotation