depend on `vtree` directly