Extensible pretty printing with semantic annotations and proportional fonts.
This is the Final Pretty Printer, an extensible prettry printing library that supports semantic annotations and proportional-width fonts. The library is extensible because it uses a final, rather than initial, encoding of pretty printer documents - they are monadic programs, rather than a datatype. This means it can be extended by monad transformers. Semantic annotations allow pretty printer documents to contain references to the data that they represent, which can enable interactive output. Proportional-width fonts are supported by allowing the measurement of widths to be performed in some arbitrary monad, so IO can be used to look at the output of a font rendering library.