This is the pretty-printer that we use in GHC.
type Pretty ppShow :: Int{-width-} -> Pretty -> [Char] pp'SP :: Pretty -- "comma space" ppComma :: Pretty -- , ppEquals :: Pretty -- = ppLbrack :: Pretty -- [ ppLparen :: Pretty -- ( ppNil :: Pretty -- nothing ppRparen :: Pretty -- ) ppRbrack :: Pretty -- ] ppSP :: Pretty -- space ppSemi :: Pretty -- ; ppChar :: Char -> Pretty ppDouble :: Double -> Pretty ppFloat :: Float -> Pretty ppInt :: Int -> Pretty ppInteger :: Integer -> Pretty ppRational :: Rational -> Pretty ppStr :: [Char] -> Pretty ppAbove :: Pretty -> Pretty -> Pretty ppAboves :: [Pretty] -> Pretty ppBeside :: Pretty -> Pretty -> Pretty ppBesides :: [Pretty] -> Pretty ppCat :: [Pretty] -> Pretty ppHang :: Pretty -> Int -> Pretty -> Pretty ppInterleave :: Pretty -> [Pretty] -> Pretty -- spacing between ppIntersperse :: Pretty -> [Pretty] -> Pretty -- no spacing between ppNest :: Int -> Pretty -> Pretty ppSep :: [Pretty] -> Pretty