public <A extends Appendable> A appendTo(A appendable, Iterator<?> parts) {
        try {
            if (parts.hasNext()) {
                appendable.append(toString(parts.next()));
                while (parts.hasNext()) {
                    appendable.append(separator);
                    appendable.append(toString(parts.next()));
                }
            }
            return appendable;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }