Several algorithmic improvements to the Wadler-Leijen pretty-printing algorithm.
Several algorithmic improvements to the Wadler-Leijen pretty-printing algorithm.

1) Addition of the @Fail@ primitive, representing a document that can not be
   rendered. @Fail@ is a left unit of @Union@ and does not `fit' into any page
   width. It allows the construction of documents that can not be flattened, for
   example comments that must be followed by a newline. It also alows the
   construction of hard lines, which are guaranteed to be rendered as a newline.

2) Addition of the @FlatAlt@ primitive, representing a document which changes
   under flattening. This unifies the linebreak combinators and allows for more
   flexible linebreak to be created, for example linebreaks in a do-block that
   should become semicolons when flattened.

3) Addition of a more intelligent rendering algorithm, which partially solves
   the lookahead problem caused by deeply nested structures where a single-line
   lookahead will not always allow a document to be formatted within the
   pagewidth.

quchen/prettyprinter,hvr/ansi-wl-pprint,nwf/ansi-wl-pprint,batterseapower/ansi-wl-pprint,quchen/prettyprinter,seereason/ansi-wl-pprint