-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Pretty-printing library -- -- This package contains a pretty-printing library, a set of API's that -- provides a way to easily print out text in a consistent format of your -- choosing. This is useful for compilers and related tools. -- -- This library was originally designed by John Hughes's and has since -- been heavily modified by Simon Peyton Jones. @package pretty @version 1.1.1.0 -- | John Hughes's and Simon Peyton Jones's Pretty Printer Combinators -- -- Based on <i>The Design of a Pretty-printing Library</i> in Advanced -- Functional Programming, Johan Jeuring and Erik Meijer (eds), LNCS 925 -- <a>http://www.cs.chalmers.se/~rjmh/Papers/pretty.ps</a> -- -- Heavily modified by Simon Peyton Jones (December 1996). module Text.PrettyPrint.HughesPJ -- | The abstract type of documents. A Doc represents a *set* of layouts. A -- Doc with no occurrences of Union or NoDoc represents just one layout. data Doc -- | The TextDetails data type -- -- A TextDetails represents a fragment of text that will be output at -- some point. data TextDetails -- | A single Char fragment Chr :: {-# UNPACK #-} !Char -> TextDetails -- | A whole String fragment Str :: String -> TextDetails -- | Used to represent a Fast String fragment but now deprecated and -- identical to the Str constructor. PStr :: String -> TextDetails -- | A document of height and width 1, containing a literal character. char :: Char -> Doc -- | A document of height 1 containing a literal string. <a>text</a> -- satisfies the following laws: -- -- <ul> -- <li><pre><a>text</a> s <a><></a> <a>text</a> t = <a>text</a> -- (s<a>++</a>t)</pre></li> -- <li><tt><a>text</a> "" <a><></a> x = x</tt>, if <tt>x</tt> -- non-empty</li> -- </ul> -- -- The side condition on the last law is necessary because -- <tt><a>text</a> ""</tt> has height 1, while <a>empty</a> has no -- height. text :: String -> Doc -- | Same as <tt>text</tt>. Used to be used for Bytestrings. ptext :: String -> Doc -- | Some text with any width. (<tt>text s = sizedText (length s) s</tt>) sizedText :: Int -> String -> Doc -- | Some text, but without any width. Use for non-printing text such as a -- HTML or Latex tags zeroWidthText :: String -> Doc int :: Int -> Doc integer :: Integer -> Doc float :: Float -> Doc double :: Double -> Doc rational :: Rational -> Doc semi :: Doc comma :: Doc colon :: Doc space :: Doc equals :: Doc lparen :: Doc rparen :: Doc lbrack :: Doc rbrack :: Doc lbrace :: Doc rbrace :: Doc parens :: Doc -> Doc brackets :: Doc -> Doc braces :: Doc -> Doc quotes :: Doc -> Doc doubleQuotes :: Doc -> Doc -- | The empty document, with no height and no width. <a>empty</a> is the -- identity for <a><></a>, <a><+></a>, <a>$$</a> and -- <a>$+$</a>, and anywhere in the argument list for <a>sep</a>, -- <a>hcat</a>, <a>hsep</a>, <a>vcat</a>, <a>fcat</a> etc. empty :: Doc -- | Beside. <a><></a> is associative, with identity <a>empty</a>. (<>) :: Doc -> Doc -> Doc -- | Beside, separated by space, unless one of the arguments is -- <a>empty</a>. <a><+></a> is associative, with identity -- <a>empty</a>. (<+>) :: Doc -> Doc -> Doc -- | List version of <a><></a>. hcat :: [Doc] -> Doc -- | List version of <a><+></a>. hsep :: [Doc] -> Doc -- | Above, except that if the last line of the first argument stops at -- least one position before the first line of the second begins, these -- two lines are overlapped. For example: -- -- <pre> -- text "hi" $$ nest 5 (text "there") -- </pre> -- -- lays out as -- -- <pre> -- hi there -- </pre> -- -- rather than -- -- <pre> -- hi -- there -- </pre> -- -- <a>$$</a> is associative, with identity <a>empty</a>, and also -- satisfies -- -- <ul> -- <li><tt>(x <a>$$</a> y) <a><></a> z = x <a>$$</a> (y -- <a><></a> z)</tt>, if <tt>y</tt> non-empty.</li> -- </ul> ($$) :: Doc -> Doc -> Doc -- | Above, with no overlapping. <a>$+$</a> is associative, with identity -- <a>empty</a>. ($+$) :: Doc -> Doc -> Doc -- | List version of <a>$$</a>. vcat :: [Doc] -> Doc -- | Either <a>hsep</a> or <a>vcat</a>. sep :: [Doc] -> Doc -- | Either <a>hcat</a> or <a>vcat</a>. cat :: [Doc] -> Doc -- | "Paragraph fill" version of <a>sep</a>. fsep :: [Doc] -> Doc -- | "Paragraph fill" version of <a>cat</a>. fcat :: [Doc] -> Doc -- | Nest (or indent) a document by a given number of positions (which may -- also be negative). <a>nest</a> satisfies the laws: -- -- <ul> -- <li><pre><a>nest</a> 0 x = x</pre></li> -- <li><pre><a>nest</a> k (<a>nest</a> k' x) = <a>nest</a> (k+k') -- x</pre></li> -- <li><pre><a>nest</a> k (x <a><></a> y) = <a>nest</a> k z -- <a><></a> <a>nest</a> k y</pre></li> -- <li><pre><a>nest</a> k (x <a>$$</a> y) = <a>nest</a> k x <a>$$</a> -- <a>nest</a> k y</pre></li> -- <li><pre><a>nest</a> k <a>empty</a> = <a>empty</a></pre></li> -- <li><tt>x <a><></a> <a>nest</a> k y = x <a><></a> y</tt>, -- if <tt>x</tt> non-empty</li> -- </ul> -- -- The side condition on the last law is needed because <a>empty</a> is a -- left identity for <a><></a>. nest :: Int -> Doc -> Doc -- | <pre> -- hang d1 n d2 = sep [d1, nest n d2] -- </pre> hang :: Doc -> Int -> Doc -> Doc -- | <pre> -- punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn] -- </pre> punctuate :: Doc -> [Doc] -> [Doc] -- | Returns <a>True</a> if the document is empty isEmpty :: Doc -> Bool -- | <tt>first</tt> returns its first argument if it is non-empty, -- otherwise its second. first :: Doc -> Doc -> Doc -- | Perform some simplification of a built up <tt>GDoc</tt>. reduceDoc :: Doc -> RDoc a -- | Render the <tt>Doc</tt> to a String using the default <tt>Style</tt>. render :: Doc -> String -- | A rendering style. data Style Style :: Mode -> Int -> Float -> Style -- | The rendering mode mode :: Style -> Mode -- | Length of line, in chars lineLength :: Style -> Int -- | Ratio of ribbon length to line length ribbonsPerLine :: Style -> Float -- | The default style (<tt>mode=PageMode, lineLength=100, -- ribbonsPerLine=1.5</tt>). style :: Style -- | Render the <tt>Doc</tt> to a String using the given <tt>Style</tt>. renderStyle :: Style -> Doc -> String -- | Rendering mode. data Mode -- | Normal PageMode :: Mode -- | With zig-zag cuts ZigZagMode :: Mode -- | No indentation, infinitely long lines LeftMode :: Mode -- | All on one line OneLineMode :: Mode -- | The general rendering interface. fullRender :: Mode -> Int -> Float -> (TextDetails -> a -> a) -> a -> Doc -> a instance [safe] Show Doc instance [safe] IsString Doc instance [safe] Monoid Doc -- | The default interface to the pretty-printing library. Provides a -- collection of pretty printer combinators. -- -- This module should be used as opposed to the -- <a>Text.PrettyPrint.HughesPJ</a> module. Both are equivalent though as -- this module simply re-exports the other. module Text.PrettyPrint -- | The abstract type of documents. A Doc represents a *set* of layouts. A -- Doc with no occurrences of Union or NoDoc represents just one layout. data Doc -- | A document of height and width 1, containing a literal character. char :: Char -> Doc -- | A document of height 1 containing a literal string. <a>text</a> -- satisfies the following laws: -- -- <ul> -- <li><pre><a>text</a> s <a><></a> <a>text</a> t = <a>text</a> -- (s<a>++</a>t)</pre></li> -- <li><tt><a>text</a> "" <a><></a> x = x</tt>, if <tt>x</tt> -- non-empty</li> -- </ul> -- -- The side condition on the last law is necessary because -- <tt><a>text</a> ""</tt> has height 1, while <a>empty</a> has no -- height. text :: String -> Doc -- | Same as <tt>text</tt>. Used to be used for Bytestrings. ptext :: String -> Doc -- | Some text with any width. (<tt>text s = sizedText (length s) s</tt>) sizedText :: Int -> String -> Doc -- | Some text, but without any width. Use for non-printing text such as a -- HTML or Latex tags zeroWidthText :: String -> Doc int :: Int -> Doc integer :: Integer -> Doc float :: Float -> Doc double :: Double -> Doc rational :: Rational -> Doc semi :: Doc comma :: Doc colon :: Doc space :: Doc equals :: Doc lparen :: Doc rparen :: Doc lbrack :: Doc rbrack :: Doc lbrace :: Doc rbrace :: Doc parens :: Doc -> Doc brackets :: Doc -> Doc braces :: Doc -> Doc quotes :: Doc -> Doc doubleQuotes :: Doc -> Doc -- | The empty document, with no height and no width. <a>empty</a> is the -- identity for <a><></a>, <a><+></a>, <a>$$</a> and -- <a>$+$</a>, and anywhere in the argument list for <a>sep</a>, -- <a>hcat</a>, <a>hsep</a>, <a>vcat</a>, <a>fcat</a> etc. empty :: Doc -- | Beside. <a><></a> is associative, with identity <a>empty</a>. (<>) :: Doc -> Doc -> Doc -- | Beside, separated by space, unless one of the arguments is -- <a>empty</a>. <a><+></a> is associative, with identity -- <a>empty</a>. (<+>) :: Doc -> Doc -> Doc -- | List version of <a><></a>. hcat :: [Doc] -> Doc -- | List version of <a><+></a>. hsep :: [Doc] -> Doc -- | Above, except that if the last line of the first argument stops at -- least one position before the first line of the second begins, these -- two lines are overlapped. For example: -- -- <pre> -- text "hi" $$ nest 5 (text "there") -- </pre> -- -- lays out as -- -- <pre> -- hi there -- </pre> -- -- rather than -- -- <pre> -- hi -- there -- </pre> -- -- <a>$$</a> is associative, with identity <a>empty</a>, and also -- satisfies -- -- <ul> -- <li><tt>(x <a>$$</a> y) <a><></a> z = x <a>$$</a> (y -- <a><></a> z)</tt>, if <tt>y</tt> non-empty.</li> -- </ul> ($$) :: Doc -> Doc -> Doc -- | Above, with no overlapping. <a>$+$</a> is associative, with identity -- <a>empty</a>. ($+$) :: Doc -> Doc -> Doc -- | List version of <a>$$</a>. vcat :: [Doc] -> Doc -- | Either <a>hsep</a> or <a>vcat</a>. sep :: [Doc] -> Doc -- | Either <a>hcat</a> or <a>vcat</a>. cat :: [Doc] -> Doc -- | "Paragraph fill" version of <a>sep</a>. fsep :: [Doc] -> Doc -- | "Paragraph fill" version of <a>cat</a>. fcat :: [Doc] -> Doc -- | Nest (or indent) a document by a given number of positions (which may -- also be negative). <a>nest</a> satisfies the laws: -- -- <ul> -- <li><pre><a>nest</a> 0 x = x</pre></li> -- <li><pre><a>nest</a> k (<a>nest</a> k' x) = <a>nest</a> (k+k') -- x</pre></li> -- <li><pre><a>nest</a> k (x <a><></a> y) = <a>nest</a> k z -- <a><></a> <a>nest</a> k y</pre></li> -- <li><pre><a>nest</a> k (x <a>$$</a> y) = <a>nest</a> k x <a>$$</a> -- <a>nest</a> k y</pre></li> -- <li><pre><a>nest</a> k <a>empty</a> = <a>empty</a></pre></li> -- <li><tt>x <a><></a> <a>nest</a> k y = x <a><></a> y</tt>, -- if <tt>x</tt> non-empty</li> -- </ul> -- -- The side condition on the last law is needed because <a>empty</a> is a -- left identity for <a><></a>. nest :: Int -> Doc -> Doc -- | <pre> -- hang d1 n d2 = sep [d1, nest n d2] -- </pre> hang :: Doc -> Int -> Doc -> Doc -- | <pre> -- punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn] -- </pre> punctuate :: Doc -> [Doc] -> [Doc] -- | Returns <a>True</a> if the document is empty isEmpty :: Doc -> Bool -- | Render the <tt>Doc</tt> to a String using the default <tt>Style</tt>. render :: Doc -> String -- | A rendering style. data Style Style :: Mode -> Int -> Float -> Style -- | The rendering mode mode :: Style -> Mode -- | Length of line, in chars lineLength :: Style -> Int -- | Ratio of ribbon length to line length ribbonsPerLine :: Style -> Float -- | The default style (<tt>mode=PageMode, lineLength=100, -- ribbonsPerLine=1.5</tt>). style :: Style -- | Render the <tt>Doc</tt> to a String using the given <tt>Style</tt>. renderStyle :: Style -> Doc -> String -- | The general rendering interface. fullRender :: Mode -> Int -> Float -> (TextDetails -> a -> a) -> a -> Doc -> a -- | Rendering mode. data Mode -- | Normal PageMode :: Mode -- | With zig-zag cuts ZigZagMode :: Mode -- | No indentation, infinitely long lines LeftMode :: Mode -- | All on one line OneLineMode :: Mode -- | The TextDetails data type -- -- A TextDetails represents a fragment of text that will be output at -- some point. data TextDetails -- | A single Char fragment Chr :: {-# UNPACK #-} !Char -> TextDetails -- | A whole String fragment Str :: String -> TextDetails -- | Used to represent a Fast String fragment but now deprecated and -- identical to the Str constructor. PStr :: String -> TextDetails