This library contains Simon Peyton Jones' implementation of John Hughes's pretty printer combinators.
infixl 6 <>, <+> infixl 5 $$, $+$ data Doc -- the document datatype, abstract, instance of Show -- primitive documents empty :: Doc semi, comma, colon :: Doc space, equals :: Doc lparen, rparen :: Doc lbrack, rbrack :: Doc lbrace, rbrace :: Doc -- converting values into documents text :: String -> Doc ptext :: String -> Doc char :: Char -> Doc int :: Int -> Doc integer :: Integer -> Doc float :: Float -> Doc double :: Double -> Doc rational :: Rational -> Doc -- wrapping documents into delimiters parens, brackets, braces :: Doc -> Doc quotes, doubleQuotes :: Doc -> Doc -- combining documents (<>) :: Doc -> Doc -> Doc -- Beside hcat :: [Doc] -> Doc -- List version of <> (<+>) :: Doc -> Doc -> Doc -- Beside, separated by space hsep :: [Doc] -> Doc -- List version of <+> ($$) :: Doc -> Doc -> Doc -- Above; "dovetails" if no overlap vcat :: [Doc] -> Doc -- List version of $$ ($+$) :: Doc -> Doc -> Doc -- Above; never overlaps cat :: [Doc] -> Doc -- Either hcat or vcat sep :: [Doc] -> Doc -- Either hsep or vcat fcat :: [Doc] -> Doc -- "Paragraph fill" version of cat fsep :: [Doc] -> Doc -- "Paragraph fill" version of sep nest :: Int -> Doc -> Doc -- Nested hang :: Doc -> Int -> Doc -> Doc punctuate :: Doc -> [Doc] -> [Doc] -- punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn] -- default rendering (normal mode, line length 100, 1.5 ribbons per line) render :: Doc -> String -- general rendering of documents fullRender :: Mode -> Int -- Line length -> Float -- Ribbons per line -> (TextDetails -> a -> a) -- What to do with text -> a -- What to do at the end -> Doc -- The document to render -> a -- Result data Mode = PageMode -- Normal | ZigZagMode -- With zig-zag cuts | LeftMode -- No indentation, infinitely long lines | OneLineMode -- All on one line data TextDetails = Chr Char | Str String | PStr String -- predicate on documents isEmpty :: Doc -> Bool |