@SuppressWarnings("unchecked")
    public static <T> ImmutableList<T> of(
            final ImmutableList<? extends T> left,
            final ImmutableList<? extends T> right) {
        if (right.isEmpty()) {
            return (ImmutableList<T>) left;
        }
        if (left.isEmpty()) {
            return (ImmutableList<T>) right;
        }
        return new ImmutableJoinList<>(left, right);
    }