docs: @SafeVarargs
  	public static <T> T eval(
  		final Tree<? extends Op<T>, ?> tree,
  		final T... variables
  	) {
  		requireNonNull(tree);
  		requireNonNull(variables);
  
  		final Op<T> op = tree.getValue();
  		return op.isTerminal()
  			? eval(op, variables)
  			: eval(op,
  					tree.childStream()
  						.map(child -> eval(child, variables))
  						.toArray(size -> newArray(variables.getClass(), size))
  				);
  	}