abstract class DomBuilder<T> { DomBuilderElement<T> append( String tagName, void Function(DomBuilderElement<T>) f); void text(String value); } abstract class DomBuilderElement<T> extends DomBuilder<T> { void attr(String name, [String value]); void attrs(Map<String, String> map); T close(); }