-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | Pretty printing designed for printing source code.
--   
--   Pretty printing designed for printing source code based on Wadler's
--   paper A Prettier Printer. The main advantage of this library is
--   its ability to automatically track the source locations associated
--   with pretty printed values and output appropriate #line pragmas and
--   its ability to produce output in the form of lazy text using a
--   builder.
@package mainland-pretty
@version 0.7.1.1

-- | This module is based on A Prettier Printer by Phil Wadler in
--   The Fun of Programming, Jeremy Gibbons and Oege de Moor (eds)
--   http://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf
--   
--   At the time it was originally written I didn't know about Daan
--   Leijen's pretty printing module based on the same paper. I have since
--   incorporated many of his improvements. This module is geared towards
--   pretty printing source code; its main advantages over other libraries
--   are the ability to automatically track the source locations associated
--   with pretty printed values and output appropriate #line pragmas and
--   the use of Text for output.
module Text.PrettyPrint.Mainland

-- | The abstract type of documents.
data Doc

-- | The document text s consists of the string s,
--   which should not contain any newlines. For a string that may include
--   newlines, use string.
text :: String -> Doc

-- | The document bool b is equivalent to text (show b).
bool :: Bool -> Doc

-- | The document char c consists the single character
--   c.
char :: Char -> Doc

-- | The document string s consists of all the characters
--   in s but with newlines replaced by line.
string :: String -> Doc

-- | The document int i is equivalent to text (show i).
int :: Int -> Doc

-- | The document integer i is equivalent to text (show
--   i). text.
integer :: Integer -> Doc

-- | The document float f is equivalent to text (show f).
float :: Float -> Doc

-- | The document double d is equivalent to text (show
--   d).
double :: Double -> Doc

-- | The document rational r is equivalent to text (show
--   r).
rational :: Rational -> Doc

-- | The document strictText s consists of the Text
--   s, which should not contain any newlines.
strictText :: Text -> Doc

-- | The document lazyText s consists of the Text
--   s, which should not contain any newlines.
lazyText :: Text -> Doc

-- | The document star consists of an asterisk, "*".
star :: Doc

-- | The document colon consists of a colon, ":".
colon :: Doc

-- | The document comma consists of a comma, ",".
comma :: Doc

-- | The document dot consists of a period, ".".
dot :: Doc

-- | The document equals consists of an equals sign, "=".
equals :: Doc

-- | The document semi consists of a semicolon, ";".
semi :: Doc

-- | The document space consists of a space, " ".
space :: Doc

-- | The document space n consists of n spaces.
spaces :: Int -> Doc

-- | The document backquote consists of a backquote, "`".
backquote :: Doc

-- | The document squote consists of a single quote,
--   "\'".
squote :: Doc

-- | The document dquote consists of a double quote,
--   "\"".
dquote :: Doc

-- | The document langle consists of a less-than sign,
--   "<".
langle :: Doc

-- | The document rangle consists of a greater-than sign,
--   ">".
rangle :: Doc

-- | The document lbrace consists of a left brace, "{".
lbrace :: Doc

-- | The document rbrace consists of a right brace, "}".
rbrace :: Doc

-- | The document lbracket consists of a right brace,
--   "[".
lbracket :: Doc

-- | The document rbracket consists of a right brace,
--   "]".
rbracket :: Doc

-- | The document lparen consists of a right brace, "(".
lparen :: Doc

-- | The document rparen consists of a right brace, ")".
rparen :: Doc

-- | The empty document.
empty :: Doc

-- | The document srcloc x tags the current line with
--   locOf x. Only shown when running prettyPragma
--   and friends.
srcloc :: Located a => a -> Doc

-- | The document line advances to the next line and
--   indents to the current indentation level. When undone by group,
--   it behaves like space.
line :: Doc

-- | Becomes space if there is room, otherwise line.
--   
--   
--   pretty 11 $ text "foo" <+/> text "bar" <+/> text "baz" =="foo bar baz"
--   pretty  7 $ text "foo" <+/> text "bar" <+/> text "baz" == "foo bar\nbaz"
--   pretty  6 $ text "foo" <+/> text "bar" <+/> text "baz" == "foo\nbar\nbaz"
--   
softline :: Doc

-- | Becomes empty if there is room, otherwise line.
softbreak :: Doc

-- | Provide alternative layouts of the same content. Invariant: both
--   arguments must flatten to the same document.
(<|>) :: Doc -> Doc -> Doc
infixl 3 <|>

-- | Concatenates two documents with a space in between, with
--   identity empty.
(<+>) :: Doc -> Doc -> Doc
infixr 6 <+>

-- | Concatenates two documents with a line in between, with
--   identity empty.
(</>) :: Doc -> Doc -> Doc
infixr 5 </>

-- | Concatenates two documents with a softline in between, with
--   identity empty.
(<+/>) :: Doc -> Doc -> Doc
infixr 5 <+/>

-- | Concatenates two documents with a softbreak in between.
(<//>) :: Doc -> Doc -> Doc
infixr 5 <//>

-- | The document group d will flatten d to
--   one line if there is room for it, otherwise the original
--   d.
group :: Doc -> Doc

-- | The document flatten d will flatten d to
--   one line.
flatten :: Doc -> Doc

-- | The document enclose l r d encloses the document
--   d between the documents l and r using
--   <>. It obeys the law
--   
--   
--   enclose l r d = l <> d <> r
--   
enclose :: Doc -> Doc -> Doc -> Doc

-- | The document squotes d encloses the alinged document
--   d in '...'.
squotes :: Doc -> Doc

-- | The document dquotes d encloses the aligned document
--   d in "...".
dquotes :: Doc -> Doc

-- | The document angles d encloses the aligned document
--   d in <...>.
angles :: Doc -> Doc

-- | The document backquotes d encloses the aligned
--   document d in `...`.
backquotes :: Doc -> Doc

-- | The document braces d encloses the aligned document
--   d in {...}.
braces :: Doc -> Doc

-- | The document brackets d encloses the aligned document
--   d in [...].
brackets :: Doc -> Doc

-- | The document parens d encloses the aligned document
--   d in (...).
parens :: Doc -> Doc

-- | The document parensIf p d encloses the document
--   d in parenthesis if p is True, and
--   otherwise yields just d.
parensIf :: Bool -> Doc -> Doc

-- | The document folddoc f ds obeys the laws:
--   
--   
--   
- 
folddoc f [] = empty

--   
- 
folddoc f [d1, d2, ..., dnm1, dn] = d1 f (d2
--   f ... (dnm1 f dn))

--   
folddoc :: (Doc -> Doc -> Doc) -> [Doc] -> Doc

-- | The document spread ds concatenates the documents
--   ds with space.
spread :: [Doc] -> Doc

-- | The document stack ds concatenates the documents
--   ds with line.
stack :: [Doc] -> Doc

-- | The document cat ds concatenates the documents
--   ds with the empty document as long as there is room,
--   and uses line when there isn't.
cat :: [Doc] -> Doc

-- | The document sep ds concatenates the documents
--   ds with the space document as long as there is room,
--   and uses line when there isn't.
sep :: [Doc] -> Doc

-- | The document punctuate p ds obeys the law:
--   
--   
--   punctuate p [d1, d2, ..., dn] = [d1 <> p, d2 <> p, ..., dn]
--   
punctuate :: Doc -> [Doc] -> [Doc]

-- | The document commasep ds comma-space separates
--   ds, aligning the resulting document to the current nesting
--   level.
commasep :: [Doc] -> Doc

-- | The document semisep ds semicolon-space separates
--   ds, aligning the resulting document to the current nesting
--   level.
semisep :: [Doc] -> Doc

-- | The document enclosesep l r p ds separates ds
--   with the punctuation p and encloses the result using
--   l and r. When wrapped, punctuation appears at the
--   end of the line. The enclosed portion of the document is aligned one
--   column to the right of the opening document.
--   
--   
--   > ws = map text (words "The quick brown fox jumps over the lazy dog")
--   > test = pretty 15 (enclosesep lparen rparen comma ws)
--   
--   
--   will be layed out as:
--   
--   
--   (The, quick,
--    brown, fox,
--    jumps, over,
--    the, lazy,
--    dog)
--   
enclosesep :: Doc -> Doc -> Doc -> [Doc] -> Doc

-- | The document tuple ds separates ds with
--   commas and encloses them with parentheses.
tuple :: [Doc] -> Doc

-- | The document list ds separates ds with commas
--   and encloses them with brackets.
list :: [Doc] -> Doc

-- | The document align d renders d with a nesting
--   level set to the current column.
align :: Doc -> Doc

-- | The document hang i d renders d with a
--   nesting level set to the current column plus i, not
--   including the first line.
hang :: Int -> Doc -> Doc

-- | The document indent i d renders d with a
--   nesting level set to the current column plus i,
--   including the first line.
indent :: Int -> Doc -> Doc

-- | The document nest i d renders the document d
--   with the current indentation level increased by i.
nest :: Int -> Doc -> Doc

-- | The document column f is produced by calling
--   f with the current column.
column :: (Int -> Doc) -> Doc

-- | The document column f is produced by calling
--   f with the current nesting level.
nesting :: (Int -> Doc) -> Doc

-- | The document width d f is produced by concatenating
--   d with the result of calling f with the width of the
--   document d.
width :: Doc -> (Int -> Doc) -> Doc

-- | The document fill i d renders document x,
--   appending spaces until the width is equal to i. If
--   the width of d is already greater than i, nothing is
--   appended.
fill :: Int -> Doc -> Doc

-- | The document fillbreak i d renders document
--   d, appending spaces until the width is equal
--   to i. If the width of d is already greater than
--   i, the nesting level is increased by i and a
--   line is appended.
fillbreak :: Int -> Doc -> Doc

-- | Equivalent of fail, but with a document instead of a string.
faildoc :: MonadFail m => Doc -> m a

-- | Equivalent of error, but with a document instead of a string.
errordoc :: Doc -> a

-- | A rendered document.
data RDoc

-- | The empty document
REmpty :: RDoc

-- | A single character
RChar :: {-# UNPACK #-} !Char -> RDoc -> RDoc

-- | Doc with associated length (to avoid recomputation)
RString :: {-# UNPACK #-} !Int -> String -> RDoc -> RDoc

-- | Text
RText :: Text -> RDoc -> RDoc

-- | Text
RLazyText :: Text -> RDoc -> RDoc

-- | Tag output with source location
RPos :: Pos -> RDoc -> RDoc

-- | A newline with the indentation of the subsequent line. If this is
--   followed by a RPos, output an appropriate #line pragma
--   before the newline.
RLine :: {-# UNPACK #-} !Int -> RDoc -> RDoc

-- | Render a document given a maximum width.
render :: Int -> Doc -> RDoc

-- | Render a document without indentation on infinitely long lines. Since
--   no 'pretty' printing is involved, this renderer is fast. The resulting
--   output contains fewer characters.
renderCompact :: Doc -> RDoc

-- | Display a rendered document.
displayS :: RDoc -> ShowS

-- | Render and display a document.
prettyS :: Int -> Doc -> ShowS

-- | Render and convert a document to a Doc.
pretty :: Int -> Doc -> String

-- | Render and display a document compactly.
prettyCompactS :: Doc -> ShowS

-- | Render and convert a document to a Doc compactly.
prettyCompact :: Doc -> String

-- | Display a rendered document with #line pragmas.
displayPragmaS :: RDoc -> ShowS

-- | Render and display a document with #line pragmas.
prettyPragmaS :: Int -> Doc -> ShowS

-- | Render and convert a document to a Doc with #line pragmas.
--   
--   
--   > let loc = Loc (Pos "filename" 3 5 7) (Pos "filename" 5 7 9)
--   > in  putStrLn $ prettyPragma 80 $ srcloc loc <> text "foo" </> text "bar" </> text "baz"
--   
--   
--   will be printed as
--   
--   
--   foo
--   #line 3 "filename"
--   bar
--   baz
--   
prettyPragma :: Int -> Doc -> String

-- | Display a rendered document as Text. Uses a builder.
displayLazyText :: RDoc -> Text

-- | Render and display a document as Text. Uses a builder.
prettyLazyText :: Int -> Doc -> Text

-- | Display a rendered document with #line pragmas as Text. Uses a
--   builder.
displayPragmaLazyText :: RDoc -> Text

-- | Render and convert a document to Text with #line pragmas. Uses
--   a builder.
prettyPragmaLazyText :: Int -> Doc -> Text

-- | Render a document with a width of 80 and print it to standard output.
putDoc :: Doc -> IO ()

-- | Render a document with a width of 80 and print it to standard output,
--   followed by a newline.
putDocLn :: Doc -> IO ()

-- | Render a document with a width of 80 and print it to the specified
--   handle.
hPutDoc :: Handle -> Doc -> IO ()

-- | Render a document with a width of 80 and print it to the specified
--   handle, followed by a newline.
hPutDocLn :: Handle -> Doc -> IO ()
instance GHC.Base.Semigroup Text.PrettyPrint.Mainland.Doc
instance GHC.Base.Monoid Text.PrettyPrint.Mainland.Doc
instance Data.String.IsString Text.PrettyPrint.Mainland.Doc

-- | This module is based on A Prettier Printer by Phil Wadler in
--   The Fun of Programming, Jeremy Gibbons and Oege de Moor (eds)
--   http://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf
--   
--   At the time it was originally written I didn't know about Daan
--   Leijen's pretty printing module based on the same paper. I have since
--   incorporated many of his improvements. This module is geared towards
--   pretty printing source code; its main advantages over other libraries
--   are the ability to automatically track the source locations associated
--   with pretty printed values and output appropriate #line pragmas and
--   the use of Text for output.
module Text.PrettyPrint.Mainland.Class
class Pretty a
ppr :: Pretty a => a -> Doc
pprPrec :: Pretty a => Int -> a -> Doc
pprList :: Pretty a => [a] -> Doc

-- | The pprint function outputs a value of any type that is an
--   instance of Pretty to the standard output device by calling
--   ppr and adding a newline.
pprint :: (Pretty a, MonadIO m) => a -> m ()
instance Text.PrettyPrint.Mainland.Class.Pretty a => Text.PrettyPrint.Mainland.Class.Pretty [a]
instance Text.PrettyPrint.Mainland.Class.Pretty a => Text.PrettyPrint.Mainland.Class.Pretty (GHC.Maybe.Maybe a)
instance Text.PrettyPrint.Mainland.Class.Pretty GHC.Types.Bool
instance Text.PrettyPrint.Mainland.Class.Pretty GHC.Types.Char
instance Text.PrettyPrint.Mainland.Class.Pretty GHC.Types.Int
instance Text.PrettyPrint.Mainland.Class.Pretty GHC.Num.Integer.Integer
instance Text.PrettyPrint.Mainland.Class.Pretty GHC.Types.Float
instance Text.PrettyPrint.Mainland.Class.Pretty GHC.Types.Double
instance (GHC.Real.Integral a, Text.PrettyPrint.Mainland.Class.Pretty a) => Text.PrettyPrint.Mainland.Class.Pretty (GHC.Real.Ratio a)
instance (GHC.Float.RealFloat a, Text.PrettyPrint.Mainland.Class.Pretty a) => Text.PrettyPrint.Mainland.Class.Pretty (Data.Complex.Complex a)
instance Text.PrettyPrint.Mainland.Class.Pretty GHC.Word.Word8
instance Text.PrettyPrint.Mainland.Class.Pretty GHC.Word.Word16
instance Text.PrettyPrint.Mainland.Class.Pretty GHC.Word.Word32
instance Text.PrettyPrint.Mainland.Class.Pretty GHC.Word.Word64
instance Text.PrettyPrint.Mainland.Class.Pretty GHC.Int.Int8
instance Text.PrettyPrint.Mainland.Class.Pretty GHC.Int.Int16
instance Text.PrettyPrint.Mainland.Class.Pretty GHC.Int.Int32
instance Text.PrettyPrint.Mainland.Class.Pretty GHC.Int.Int64
instance Text.PrettyPrint.Mainland.Class.Pretty Data.Text.Internal.Text
instance Text.PrettyPrint.Mainland.Class.Pretty Data.Text.Internal.Lazy.Text
instance Text.PrettyPrint.Mainland.Class.Pretty Text.PrettyPrint.Mainland.Doc
instance Text.PrettyPrint.Mainland.Class.Pretty Data.Loc.Pos
instance Text.PrettyPrint.Mainland.Class.Pretty Data.Loc.Loc
instance Text.PrettyPrint.Mainland.Class.Pretty x => Text.PrettyPrint.Mainland.Class.Pretty (Data.Loc.L x)
instance (Text.PrettyPrint.Mainland.Class.Pretty k, Text.PrettyPrint.Mainland.Class.Pretty v) => Text.PrettyPrint.Mainland.Class.Pretty (Data.Map.Internal.Map k v)
instance Text.PrettyPrint.Mainland.Class.Pretty a => Text.PrettyPrint.Mainland.Class.Pretty (Data.Set.Internal.Set a)
instance Text.PrettyPrint.Mainland.Class.Pretty ()
instance (Text.PrettyPrint.Mainland.Class.Pretty a, Text.PrettyPrint.Mainland.Class.Pretty b) => Text.PrettyPrint.Mainland.Class.Pretty (a, b)
instance (Text.PrettyPrint.Mainland.Class.Pretty a, Text.PrettyPrint.Mainland.Class.Pretty b, Text.PrettyPrint.Mainland.Class.Pretty c) => Text.PrettyPrint.Mainland.Class.Pretty (a, b, c)
instance (Text.PrettyPrint.Mainland.Class.Pretty a, Text.PrettyPrint.Mainland.Class.Pretty b, Text.PrettyPrint.Mainland.Class.Pretty c, Text.PrettyPrint.Mainland.Class.Pretty d) => Text.PrettyPrint.Mainland.Class.Pretty (a, b, c, d)
instance (Text.PrettyPrint.Mainland.Class.Pretty a, Text.PrettyPrint.Mainland.Class.Pretty b, Text.PrettyPrint.Mainland.Class.Pretty c, Text.PrettyPrint.Mainland.Class.Pretty d, Text.PrettyPrint.Mainland.Class.Pretty e) => Text.PrettyPrint.Mainland.Class.Pretty (a, b, c, d, e)
instance (Text.PrettyPrint.Mainland.Class.Pretty a, Text.PrettyPrint.Mainland.Class.Pretty b, Text.PrettyPrint.Mainland.Class.Pretty c, Text.PrettyPrint.Mainland.Class.Pretty d, Text.PrettyPrint.Mainland.Class.Pretty e, Text.PrettyPrint.Mainland.Class.Pretty f) => Text.PrettyPrint.Mainland.Class.Pretty (a, b, c, d, e, f)
instance (Text.PrettyPrint.Mainland.Class.Pretty a, Text.PrettyPrint.Mainland.Class.Pretty b, Text.PrettyPrint.Mainland.Class.Pretty c, Text.PrettyPrint.Mainland.Class.Pretty d, Text.PrettyPrint.Mainland.Class.Pretty e, Text.PrettyPrint.Mainland.Class.Pretty f, Text.PrettyPrint.Mainland.Class.Pretty g) => Text.PrettyPrint.Mainland.Class.Pretty (a, b, c, d, e, f, g)
instance (Text.PrettyPrint.Mainland.Class.Pretty a, Text.PrettyPrint.Mainland.Class.Pretty b, Text.PrettyPrint.Mainland.Class.Pretty c, Text.PrettyPrint.Mainland.Class.Pretty d, Text.PrettyPrint.Mainland.Class.Pretty e, Text.PrettyPrint.Mainland.Class.Pretty f, Text.PrettyPrint.Mainland.Class.Pretty g, Text.PrettyPrint.Mainland.Class.Pretty h) => Text.PrettyPrint.Mainland.Class.Pretty (a, b, c, d, e, f, g, h)
instance (Text.PrettyPrint.Mainland.Class.Pretty a, Text.PrettyPrint.Mainland.Class.Pretty b, Text.PrettyPrint.Mainland.Class.Pretty c, Text.PrettyPrint.Mainland.Class.Pretty d, Text.PrettyPrint.Mainland.Class.Pretty e, Text.PrettyPrint.Mainland.Class.Pretty f, Text.PrettyPrint.Mainland.Class.Pretty g, Text.PrettyPrint.Mainland.Class.Pretty h, Text.PrettyPrint.Mainland.Class.Pretty i) => Text.PrettyPrint.Mainland.Class.Pretty (a, b, c, d, e, f, g, h, i)
instance (Text.PrettyPrint.Mainland.Class.Pretty a, Text.PrettyPrint.Mainland.Class.Pretty b, Text.PrettyPrint.Mainland.Class.Pretty c, Text.PrettyPrint.Mainland.Class.Pretty d, Text.PrettyPrint.Mainland.Class.Pretty e, Text.PrettyPrint.Mainland.Class.Pretty f, Text.PrettyPrint.Mainland.Class.Pretty g, Text.PrettyPrint.Mainland.Class.Pretty h, Text.PrettyPrint.Mainland.Class.Pretty i, Text.PrettyPrint.Mainland.Class.Pretty j) => Text.PrettyPrint.Mainland.Class.Pretty (a, b, c, d, e, f, g, h, i, j)
instance (Text.PrettyPrint.Mainland.Class.Pretty a, Text.PrettyPrint.Mainland.Class.Pretty b, Text.PrettyPrint.Mainland.Class.Pretty c, Text.PrettyPrint.Mainland.Class.Pretty d, Text.PrettyPrint.Mainland.Class.Pretty e, Text.PrettyPrint.Mainland.Class.Pretty f, Text.PrettyPrint.Mainland.Class.Pretty g, Text.PrettyPrint.Mainland.Class.Pretty h, Text.PrettyPrint.Mainland.Class.Pretty i, Text.PrettyPrint.Mainland.Class.Pretty j, Text.PrettyPrint.Mainland.Class.Pretty k) => Text.PrettyPrint.Mainland.Class.Pretty (a, b, c, d, e, f, g, h, i, j, k)
instance (Text.PrettyPrint.Mainland.Class.Pretty a, Text.PrettyPrint.Mainland.Class.Pretty b, Text.PrettyPrint.Mainland.Class.Pretty c, Text.PrettyPrint.Mainland.Class.Pretty d, Text.PrettyPrint.Mainland.Class.Pretty e, Text.PrettyPrint.Mainland.Class.Pretty f, Text.PrettyPrint.Mainland.Class.Pretty g, Text.PrettyPrint.Mainland.Class.Pretty h, Text.PrettyPrint.Mainland.Class.Pretty i, Text.PrettyPrint.Mainland.Class.Pretty j, Text.PrettyPrint.Mainland.Class.Pretty k, Text.PrettyPrint.Mainland.Class.Pretty l) => Text.PrettyPrint.Mainland.Class.Pretty (a, b, c, d, e, f, g, h, i, j, k, l)
instance (Text.PrettyPrint.Mainland.Class.Pretty a, Text.PrettyPrint.Mainland.Class.Pretty b, Text.PrettyPrint.Mainland.Class.Pretty c, Text.PrettyPrint.Mainland.Class.Pretty d, Text.PrettyPrint.Mainland.Class.Pretty e, Text.PrettyPrint.Mainland.Class.Pretty f, Text.PrettyPrint.Mainland.Class.Pretty g, Text.PrettyPrint.Mainland.Class.Pretty h, Text.PrettyPrint.Mainland.Class.Pretty i, Text.PrettyPrint.Mainland.Class.Pretty j, Text.PrettyPrint.Mainland.Class.Pretty k, Text.PrettyPrint.Mainland.Class.Pretty l, Text.PrettyPrint.Mainland.Class.Pretty m) => Text.PrettyPrint.Mainland.Class.Pretty (a, b, c, d, e, f, g, h, i, j, k, l, m)
instance (Text.PrettyPrint.Mainland.Class.Pretty a, Text.PrettyPrint.Mainland.Class.Pretty b, Text.PrettyPrint.Mainland.Class.Pretty c, Text.PrettyPrint.Mainland.Class.Pretty d, Text.PrettyPrint.Mainland.Class.Pretty e, Text.PrettyPrint.Mainland.Class.Pretty f, Text.PrettyPrint.Mainland.Class.Pretty g, Text.PrettyPrint.Mainland.Class.Pretty h, Text.PrettyPrint.Mainland.Class.Pretty i, Text.PrettyPrint.Mainland.Class.Pretty j, Text.PrettyPrint.Mainland.Class.Pretty k, Text.PrettyPrint.Mainland.Class.Pretty l, Text.PrettyPrint.Mainland.Class.Pretty m, Text.PrettyPrint.Mainland.Class.Pretty n) => Text.PrettyPrint.Mainland.Class.Pretty (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
instance (Text.PrettyPrint.Mainland.Class.Pretty a, Text.PrettyPrint.Mainland.Class.Pretty b, Text.PrettyPrint.Mainland.Class.Pretty c, Text.PrettyPrint.Mainland.Class.Pretty d, Text.PrettyPrint.Mainland.Class.Pretty e, Text.PrettyPrint.Mainland.Class.Pretty f, Text.PrettyPrint.Mainland.Class.Pretty g, Text.PrettyPrint.Mainland.Class.Pretty h, Text.PrettyPrint.Mainland.Class.Pretty i, Text.PrettyPrint.Mainland.Class.Pretty j, Text.PrettyPrint.Mainland.Class.Pretty k, Text.PrettyPrint.Mainland.Class.Pretty l, Text.PrettyPrint.Mainland.Class.Pretty m, Text.PrettyPrint.Mainland.Class.Pretty n, Text.PrettyPrint.Mainland.Class.Pretty o) => Text.PrettyPrint.Mainland.Class.Pretty (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
