A description of ALL the ways a piece of output may be laid out.
Deliberately small: five constructors, and Or is ordered — the
single-line reading first, the multi-line one second. That ordering is what
the renderer relies on, and it is why this is not a general pretty-printing
document type.
The value is a DAG rather than a tree: the two branches of an Or share
their sub-documents, and a tree view of a nested document can be
exponentially larger than the graph. Nothing here copies, so building one
costs what it looks like it costs.