/** * Zips this tree with another, using the given function. The resulting tree is the structural * intersection of the two trees. * * @param bs A tree to zip this tree with. * @param f A function with which to zip together the two trees. * @return A new tree of the results of applying the given function over this tree and the given * tree, position-wise. */ public <B, C> Tree<C> zipWith(final Tree<B> bs, final F2<A, B, C> f) { return f.zipTreeM().f(this, bs); }