-- 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.3.6 -- | This module provides a version of pretty that allows for annotations -- to be attached to documents. Annotations are arbitrary pieces of -- metadata that can be attached to sub-documents. module Text.PrettyPrint.Annotated.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 a -- | A TextDetails represents a fragment of text that will be output at -- some point in a Doc. 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 -- | An annotation (side-metadata) attached at a particular point in a -- Doc. Allows carrying non-pretty-printed data around in a -- Doc that is attached at particular points in the structure. -- Once the Doc is render to an output type (such as -- String), we can also retrieve where in the rendered document -- our annotations start and end (see Span and -- renderSpans). data AnnotDetails a AnnotStart :: AnnotDetails a NoAnnot :: !TextDetails -> {-# UNPACK #-} !Int -> AnnotDetails a AnnotEnd :: a -> AnnotDetails a -- | A document of height and width 1, containing a literal character. char :: Char -> Doc a -- | A document of height 1 containing a literal string. text -- satisfies the following laws: -- --
-- -- The side condition on the last law is necessary because -- text "" has height 1, while empty has no -- height. text :: String -> Doc a -- | Same as text. Used to be used for Bytestrings. ptext :: String -> Doc a -- | Some text with any width. (text s = sizedText (length s) s) sizedText :: Int -> String -> Doc a -- | Some text, but without any width. Use for non-printing text such as a -- HTML or Latex tags zeroWidthText :: String -> Doc a int :: Int -> Doc a integer :: Integer -> Doc a float :: Float -> Doc a double :: Double -> Doc a rational :: Rational -> Doc a semi :: Doc a comma :: Doc a colon :: Doc a space :: Doc a equals :: Doc a lparen :: Doc a rparen :: Doc a lbrack :: Doc a rbrack :: Doc a lbrace :: Doc a rbrace :: Doc a parens :: Doc a -> Doc a brackets :: Doc a -> Doc a braces :: Doc a -> Doc a quotes :: Doc a -> Doc a doubleQuotes :: Doc a -> Doc a -- | Apply parens to Doc if boolean is true. maybeParens :: Bool -> Doc a -> Doc a -- | Apply brackets to Doc if boolean is true. maybeBrackets :: Bool -> Doc a -> Doc a -- | Apply braces to Doc if boolean is true. maybeBraces :: Bool -> Doc a -> Doc a -- | Apply quotes to Doc if boolean is true. maybeQuotes :: Bool -> Doc a -> Doc a -- | Apply doubleQuotes to Doc if boolean is true. maybeDoubleQuotes :: Bool -> Doc a -> Doc a -- | The empty document, with no height and no width. empty is the -- identity for <>, <+>, $$ and -- $+$, and anywhere in the argument list for sep, -- hcat, hsep, vcat, fcat etc. empty :: Doc a -- | Beside. <> is associative, with identity empty. (<>) :: Doc a -> Doc a -> Doc a infixl 6 <> -- | Beside, separated by space, unless one of the arguments is -- empty. <+> is associative, with identity -- empty. (<+>) :: Doc a -> Doc a -> Doc a infixl 6 <+> -- | List version of <>. hcat :: [Doc a] -> Doc a -- | List version of <+>. hsep :: [Doc a] -> Doc a -- | 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: -- ---- text "hi" $$ nest 5 (text "there") ---- -- lays out as -- --
-- hi there ---- -- rather than -- --
-- hi -- there ---- -- $$ is associative, with identity empty, and also -- satisfies -- -- ($$) :: Doc a -> Doc a -> Doc a infixl 5 $$ -- | Above, with no overlapping. $+$ is associative, with identity -- empty. ($+$) :: Doc a -> Doc a -> Doc a infixl 5 $+$ -- | List version of $$. vcat :: [Doc a] -> Doc a -- | Either hsep or vcat. sep :: [Doc a] -> Doc a -- | Either hcat or vcat. cat :: [Doc a] -> Doc a -- | "Paragraph fill" version of sep. fsep :: [Doc a] -> Doc a -- | "Paragraph fill" version of cat. fcat :: [Doc a] -> Doc a -- | Nest (or indent) a document by a given number of positions (which may -- also be negative). nest satisfies the laws: -- --
nest 0 x = x
nest k (nest k' x) = nest (k+k') -- x
nest k (x <> y) = nest k z -- <> nest k y
nest k (x $$ y) = nest k x $$ -- nest k y
nest k empty = empty
-- hang d1 n d2 = sep [d1, nest n d2] --hang :: Doc a -> Int -> Doc a -> Doc a -- |
-- punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn] --punctuate :: Doc a -> [Doc a] -> [Doc a] -- | Attach an annotation to a document. annotate :: a -> Doc a -> Doc a -- | Returns True if the document is empty isEmpty :: Doc a -> Bool -- | first returns its first argument if it is non-empty, -- otherwise its second. first :: Doc a -> Doc a -> Doc a -- | Perform some simplification of a built up GDoc. reduceDoc :: Doc a -> RDoc a -- | Render the Doc to a String using the default Style -- (see style). render :: Doc a -> String -- | Render an annotated Doc to a String and list of annotations -- (see Span) using the default Style (see style). renderSpans :: Doc ann -> (String, [Span ann]) -- | A Span represents the result of an annotation after a -- Doc has been rendered, capturing where the annotation now -- starts and ends in the rendered output. data Span a Span :: !Int -> !Int -> a -> Span a [spanStart] :: Span a -> !Int [spanLength] :: Span a -> !Int [spanAnnotation] :: Span a -> a -- | Render out a String, interpreting the annotations as part of the -- resulting document. -- -- IMPORTANT: the size of the annotation string does NOT figure -- into the layout of the document, so the document will lay out as -- though the annotations are not present. renderDecorated :: (ann -> String) -> (ann -> String) -> Doc ann -> String -- | Render a document with annotations, by interpreting the start and end -- of the annotations, as well as the text details in the context of a -- monad. renderDecoratedM :: Monad m => (ann -> m r) -> (ann -> m r) -> (String -> m r) -> m r -> Doc ann -> m r -- | A rendering style. Allows us to specify constraints to choose among -- the many different rendering options. data Style Style :: Mode -> Int -> Float -> Style -- | The rendering mode. [mode] :: Style -> Mode -- | Maximum length of a line, in characters. [lineLength] :: Style -> Int -- | Ratio of line length to ribbon length. A ribbon refers to the -- characters on a line excluding indentation. So a -- lineLength of 100, with a ribbonsPerLine of 2.0 -- would only allow up to 50 characters of ribbon to be displayed on a -- line, while allowing it to be indented up to 50 characters. [ribbonsPerLine] :: Style -> Float -- | The default style (mode=PageMode, lineLength=100, -- ribbonsPerLine=1.5). style :: Style -- | Render the Doc to a String using the given Style. renderStyle :: Style -> Doc a -> String -- | Rendering mode. data Mode -- | Normal rendering (lineLength and ribbonsPerLine -- respected'). PageMode :: Mode -- | With zig-zag cuts. ZigZagMode :: Mode -- | No indentation, infinitely long lines (lineLength ignored), but -- explicit new lines, i.e., text "one" $$ text "two", are -- respected. LeftMode :: Mode -- | All on one line, lineLength ignored and explicit new lines -- ($$) are turned into spaces. OneLineMode :: Mode -- | The general rendering interface. Please refer to the Style -- and Mode types for a description of rendering mode, line -- length and ribbons. fullRender :: Mode -> Int -> Float -> (TextDetails -> a -> a) -> a -> Doc b -> a -- | The general rendering interface, supporting annotations. Please refer -- to the Style and Mode types for a description of -- rendering mode, line length and ribbons. fullRenderAnn :: Mode -> Int -> Float -> (AnnotDetails b -> a -> a) -> a -> Doc b -> a instance GHC.Generics.Generic Text.PrettyPrint.Annotated.HughesPJ.TextDetails instance GHC.Classes.Eq Text.PrettyPrint.Annotated.HughesPJ.TextDetails instance GHC.Show.Show Text.PrettyPrint.Annotated.HughesPJ.TextDetails instance GHC.Classes.Eq a => GHC.Classes.Eq (Text.PrettyPrint.Annotated.HughesPJ.AnnotDetails a) instance GHC.Show.Show a => GHC.Show.Show (Text.PrettyPrint.Annotated.HughesPJ.AnnotDetails a) instance GHC.Generics.Generic (Text.PrettyPrint.Annotated.HughesPJ.Doc a) instance GHC.Generics.Generic Text.PrettyPrint.Annotated.HughesPJ.Mode instance GHC.Classes.Eq Text.PrettyPrint.Annotated.HughesPJ.Mode instance GHC.Show.Show Text.PrettyPrint.Annotated.HughesPJ.Mode instance GHC.Generics.Generic Text.PrettyPrint.Annotated.HughesPJ.Style instance GHC.Classes.Eq Text.PrettyPrint.Annotated.HughesPJ.Style instance GHC.Show.Show Text.PrettyPrint.Annotated.HughesPJ.Style instance GHC.Classes.Eq a => GHC.Classes.Eq (Text.PrettyPrint.Annotated.HughesPJ.Span a) instance GHC.Show.Show a => GHC.Show.Show (Text.PrettyPrint.Annotated.HughesPJ.Span a) instance GHC.Base.Functor Text.PrettyPrint.Annotated.HughesPJ.Span instance GHC.Show.Show (Text.PrettyPrint.Annotated.HughesPJ.Doc a) instance GHC.Base.Semigroup (Text.PrettyPrint.Annotated.HughesPJ.Doc a) instance GHC.Base.Monoid (Text.PrettyPrint.Annotated.HughesPJ.Doc a) instance Data.String.IsString (Text.PrettyPrint.Annotated.HughesPJ.Doc a) instance GHC.Classes.Eq (Text.PrettyPrint.Annotated.HughesPJ.Doc a) instance GHC.Base.Functor Text.PrettyPrint.Annotated.HughesPJ.Doc instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Text.PrettyPrint.Annotated.HughesPJ.Doc a) instance GHC.Base.Functor Text.PrettyPrint.Annotated.HughesPJ.AnnotDetails instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Text.PrettyPrint.Annotated.HughesPJ.AnnotDetails a) instance Control.DeepSeq.NFData Text.PrettyPrint.Annotated.HughesPJ.TextDetails -- | This module provides a version of pretty that allows for annotations -- to be attached to documents. Annotations are arbitrary pieces of -- metadata that can be attached to sub-documents. -- -- This module should be used as opposed to the HughesPJ module. -- Both are equivalent though as this module simply re-exports the other. module Text.PrettyPrint.Annotated -- | 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 -- | A document of height and width 1, containing a literal character. char :: Char -> Doc a -- | A document of height 1 containing a literal string. text -- satisfies the following laws: -- -- -- -- The side condition on the last law is necessary because -- text "" has height 1, while empty has no -- height. text :: String -> Doc a -- | Same as text. Used to be used for Bytestrings. ptext :: String -> Doc a -- | Some text with any width. (text s = sizedText (length s) s) sizedText :: Int -> String -> Doc a -- | Some text, but without any width. Use for non-printing text such as a -- HTML or Latex tags zeroWidthText :: String -> Doc a int :: Int -> Doc a integer :: Integer -> Doc a float :: Float -> Doc a double :: Double -> Doc a rational :: Rational -> Doc a semi :: Doc a comma :: Doc a colon :: Doc a space :: Doc a equals :: Doc a lparen :: Doc a rparen :: Doc a lbrack :: Doc a rbrack :: Doc a lbrace :: Doc a rbrace :: Doc a parens :: Doc a -> Doc a brackets :: Doc a -> Doc a braces :: Doc a -> Doc a quotes :: Doc a -> Doc a doubleQuotes :: Doc a -> Doc a -- | The empty document, with no height and no width. empty is the -- identity for <>, <+>, $$ and -- $+$, and anywhere in the argument list for sep, -- hcat, hsep, vcat, fcat etc. empty :: Doc a -- | Beside. <> is associative, with identity empty. (<>) :: Doc a -> Doc a -> Doc a infixl 6 <> -- | Beside, separated by space, unless one of the arguments is -- empty. <+> is associative, with identity -- empty. (<+>) :: Doc a -> Doc a -> Doc a infixl 6 <+> -- | List version of <>. hcat :: [Doc a] -> Doc a -- | List version of <+>. hsep :: [Doc a] -> Doc a -- | 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: -- --
-- text "hi" $$ nest 5 (text "there") ---- -- lays out as -- --
-- hi there ---- -- rather than -- --
-- hi -- there ---- -- $$ is associative, with identity empty, and also -- satisfies -- -- ($$) :: Doc a -> Doc a -> Doc a infixl 5 $$ -- | Above, with no overlapping. $+$ is associative, with identity -- empty. ($+$) :: Doc a -> Doc a -> Doc a infixl 5 $+$ -- | List version of $$. vcat :: [Doc a] -> Doc a -- | Either hsep or vcat. sep :: [Doc a] -> Doc a -- | Either hcat or vcat. cat :: [Doc a] -> Doc a -- | "Paragraph fill" version of sep. fsep :: [Doc a] -> Doc a -- | "Paragraph fill" version of cat. fcat :: [Doc a] -> Doc a -- | Nest (or indent) a document by a given number of positions (which may -- also be negative). nest satisfies the laws: -- --
nest 0 x = x
nest k (nest k' x) = nest (k+k') -- x
nest k (x <> y) = nest k z -- <> nest k y
nest k (x $$ y) = nest k x $$ -- nest k y
nest k empty = empty
-- hang d1 n d2 = sep [d1, nest n d2] --hang :: Doc a -> Int -> Doc a -> Doc a -- |
-- punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn] --punctuate :: Doc a -> [Doc a] -> [Doc a] -- | Attach an annotation to a document. annotate :: a -> Doc a -> Doc a -- | Returns True if the document is empty isEmpty :: Doc a -> Bool -- | Render the Doc to a String using the default Style -- (see style). render :: Doc a -> String -- | Render an annotated Doc to a String and list of annotations -- (see Span) using the default Style (see style). renderSpans :: Doc ann -> (String, [Span ann]) -- | A Span represents the result of an annotation after a -- Doc has been rendered, capturing where the annotation now -- starts and ends in the rendered output. data Span a Span :: !Int -> !Int -> a -> Span a [spanStart] :: Span a -> !Int [spanLength] :: Span a -> !Int [spanAnnotation] :: Span a -> a -- | A rendering style. Allows us to specify constraints to choose among -- the many different rendering options. data Style Style :: Mode -> Int -> Float -> Style -- | The rendering mode. [mode] :: Style -> Mode -- | Maximum length of a line, in characters. [lineLength] :: Style -> Int -- | Ratio of line length to ribbon length. A ribbon refers to the -- characters on a line excluding indentation. So a -- lineLength of 100, with a ribbonsPerLine of 2.0 -- would only allow up to 50 characters of ribbon to be displayed on a -- line, while allowing it to be indented up to 50 characters. [ribbonsPerLine] :: Style -> Float -- | The default style (mode=PageMode, lineLength=100, -- ribbonsPerLine=1.5). style :: Style -- | Render the Doc to a String using the given Style. renderStyle :: Style -> Doc a -> String -- | The general rendering interface. Please refer to the Style -- and Mode types for a description of rendering mode, line -- length and ribbons. fullRender :: Mode -> Int -> Float -> (TextDetails -> a -> a) -> a -> Doc b -> a -- | The general rendering interface, supporting annotations. Please refer -- to the Style and Mode types for a description of -- rendering mode, line length and ribbons. fullRenderAnn :: Mode -> Int -> Float -> (AnnotDetails b -> a -> a) -> a -> Doc b -> a -- | Rendering mode. data Mode -- | Normal rendering (lineLength and ribbonsPerLine -- respected'). PageMode :: Mode -- | With zig-zag cuts. ZigZagMode :: Mode -- | No indentation, infinitely long lines (lineLength ignored), but -- explicit new lines, i.e., text "one" $$ text "two", are -- respected. LeftMode :: Mode -- | All on one line, lineLength ignored and explicit new lines -- ($$) are turned into spaces. OneLineMode :: Mode -- | A TextDetails represents a fragment of text that will be output at -- some point in a Doc. 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 -- | Pretty printing class, simlar to Show but nicer looking. -- -- Note that the precedence level is a Rational so there is an -- unlimited number of levels. This module re-exports HughesPJ. module Text.PrettyPrint.Annotated.HughesPJClass -- | Pretty printing class. The precedence level is used in a similar way -- as in the Show class. Minimal complete definition is either -- pPrintPrec or pPrint. class Pretty a pPrintPrec :: Pretty a => PrettyLevel -> Rational -> a -> Doc ann pPrint :: Pretty a => a -> Doc ann pPrintList :: Pretty a => PrettyLevel -> [a] -> Doc ann -- | Level of detail in the pretty printed output. Level 0 is the least -- detail. newtype PrettyLevel PrettyLevel :: Int -> PrettyLevel -- | The "normal" (Level 0) of detail. prettyNormal :: PrettyLevel -- | Pretty print a value with the prettyNormal level. prettyShow :: Pretty a => a -> String -- | Parenthesize an value if the boolean is true. -- | Deprecated: Please use maybeParens instead prettyParen :: Bool -> Doc ann -> Doc ann instance GHC.Show.Show Text.PrettyPrint.Annotated.HughesPJClass.PrettyLevel instance GHC.Classes.Ord Text.PrettyPrint.Annotated.HughesPJClass.PrettyLevel instance GHC.Classes.Eq Text.PrettyPrint.Annotated.HughesPJClass.PrettyLevel instance Text.PrettyPrint.Annotated.HughesPJClass.Pretty GHC.Types.Int instance Text.PrettyPrint.Annotated.HughesPJClass.Pretty GHC.Integer.Type.Integer instance Text.PrettyPrint.Annotated.HughesPJClass.Pretty GHC.Types.Float instance Text.PrettyPrint.Annotated.HughesPJClass.Pretty GHC.Types.Double instance Text.PrettyPrint.Annotated.HughesPJClass.Pretty () instance Text.PrettyPrint.Annotated.HughesPJClass.Pretty GHC.Types.Bool instance Text.PrettyPrint.Annotated.HughesPJClass.Pretty GHC.Types.Ordering instance Text.PrettyPrint.Annotated.HughesPJClass.Pretty GHC.Types.Char instance Text.PrettyPrint.Annotated.HughesPJClass.Pretty a => Text.PrettyPrint.Annotated.HughesPJClass.Pretty (GHC.Maybe.Maybe a) instance (Text.PrettyPrint.Annotated.HughesPJClass.Pretty a, Text.PrettyPrint.Annotated.HughesPJClass.Pretty b) => Text.PrettyPrint.Annotated.HughesPJClass.Pretty (Data.Either.Either a b) instance Text.PrettyPrint.Annotated.HughesPJClass.Pretty a => Text.PrettyPrint.Annotated.HughesPJClass.Pretty [a] instance (Text.PrettyPrint.Annotated.HughesPJClass.Pretty a, Text.PrettyPrint.Annotated.HughesPJClass.Pretty b) => Text.PrettyPrint.Annotated.HughesPJClass.Pretty (a, b) instance (Text.PrettyPrint.Annotated.HughesPJClass.Pretty a, Text.PrettyPrint.Annotated.HughesPJClass.Pretty b, Text.PrettyPrint.Annotated.HughesPJClass.Pretty c) => Text.PrettyPrint.Annotated.HughesPJClass.Pretty (a, b, c) instance (Text.PrettyPrint.Annotated.HughesPJClass.Pretty a, Text.PrettyPrint.Annotated.HughesPJClass.Pretty b, Text.PrettyPrint.Annotated.HughesPJClass.Pretty c, Text.PrettyPrint.Annotated.HughesPJClass.Pretty d) => Text.PrettyPrint.Annotated.HughesPJClass.Pretty (a, b, c, d) instance (Text.PrettyPrint.Annotated.HughesPJClass.Pretty a, Text.PrettyPrint.Annotated.HughesPJClass.Pretty b, Text.PrettyPrint.Annotated.HughesPJClass.Pretty c, Text.PrettyPrint.Annotated.HughesPJClass.Pretty d, Text.PrettyPrint.Annotated.HughesPJClass.Pretty e) => Text.PrettyPrint.Annotated.HughesPJClass.Pretty (a, b, c, d, e) instance (Text.PrettyPrint.Annotated.HughesPJClass.Pretty a, Text.PrettyPrint.Annotated.HughesPJClass.Pretty b, Text.PrettyPrint.Annotated.HughesPJClass.Pretty c, Text.PrettyPrint.Annotated.HughesPJClass.Pretty d, Text.PrettyPrint.Annotated.HughesPJClass.Pretty e, Text.PrettyPrint.Annotated.HughesPJClass.Pretty f) => Text.PrettyPrint.Annotated.HughesPJClass.Pretty (a, b, c, d, e, f) instance (Text.PrettyPrint.Annotated.HughesPJClass.Pretty a, Text.PrettyPrint.Annotated.HughesPJClass.Pretty b, Text.PrettyPrint.Annotated.HughesPJClass.Pretty c, Text.PrettyPrint.Annotated.HughesPJClass.Pretty d, Text.PrettyPrint.Annotated.HughesPJClass.Pretty e, Text.PrettyPrint.Annotated.HughesPJClass.Pretty f, Text.PrettyPrint.Annotated.HughesPJClass.Pretty g) => Text.PrettyPrint.Annotated.HughesPJClass.Pretty (a, b, c, d, e, f, g) instance (Text.PrettyPrint.Annotated.HughesPJClass.Pretty a, Text.PrettyPrint.Annotated.HughesPJClass.Pretty b, Text.PrettyPrint.Annotated.HughesPJClass.Pretty c, Text.PrettyPrint.Annotated.HughesPJClass.Pretty d, Text.PrettyPrint.Annotated.HughesPJClass.Pretty e, Text.PrettyPrint.Annotated.HughesPJClass.Pretty f, Text.PrettyPrint.Annotated.HughesPJClass.Pretty g, Text.PrettyPrint.Annotated.HughesPJClass.Pretty h) => Text.PrettyPrint.Annotated.HughesPJClass.Pretty (a, b, c, d, e, f, g, h) -- | Provides a collection of pretty printer combinators, a set of API's -- that provides a way to easily print out text in a consistent format of -- your choosing. -- -- Originally designed by John Hughes's and Simon Peyton Jones's. -- -- For more information you can refer to the original paper that -- serves as the basis for this libraries design: /The Design of a -- Pretty-printing Library/ by John Hughes, in Advanced Functional -- Programming, 1995. 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 -- | A TextDetails represents a fragment of text that will be output at -- some point in a Doc. 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. text -- satisfies the following laws: -- -- -- -- The side condition on the last law is necessary because -- text "" has height 1, while empty has no -- height. text :: String -> Doc -- | Same as text. Used to be used for Bytestrings. ptext :: String -> Doc -- | Some text with any width. (text s = sizedText (length s) s) 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 -- | Apply parens to Doc if boolean is true. maybeParens :: Bool -> Doc -> Doc -- | Apply brackets to Doc if boolean is true. maybeBrackets :: Bool -> Doc -> Doc -- | Apply braces to Doc if boolean is true. maybeBraces :: Bool -> Doc -> Doc -- | Apply quotes to Doc if boolean is true. maybeQuotes :: Bool -> Doc -> Doc -- | Apply doubleQuotes to Doc if boolean is true. maybeDoubleQuotes :: Bool -> Doc -> Doc -- | The empty document, with no height and no width. empty is the -- identity for <>, <+>, $$ and -- $+$, and anywhere in the argument list for sep, -- hcat, hsep, vcat, fcat etc. empty :: Doc -- | Beside. <> is associative, with identity empty. (<>) :: Doc -> Doc -> Doc infixl 6 <> -- | Beside, separated by space, unless one of the arguments is -- empty. <+> is associative, with identity -- empty. (<+>) :: Doc -> Doc -> Doc infixl 6 <+> -- | List version of <>. hcat :: [Doc] -> Doc -- | List version of <+>. 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: -- --
-- text "hi" $$ nest 5 (text "there") ---- -- lays out as -- --
-- hi there ---- -- rather than -- --
-- hi -- there ---- -- $$ is associative, with identity empty, and also -- satisfies -- -- ($$) :: Doc -> Doc -> Doc infixl 5 $$ -- | Above, with no overlapping. $+$ is associative, with identity -- empty. ($+$) :: Doc -> Doc -> Doc infixl 5 $+$ -- | List version of $$. vcat :: [Doc] -> Doc -- | Either hsep or vcat. sep :: [Doc] -> Doc -- | Either hcat or vcat. cat :: [Doc] -> Doc -- | "Paragraph fill" version of sep. fsep :: [Doc] -> Doc -- | "Paragraph fill" version of cat. fcat :: [Doc] -> Doc -- | Nest (or indent) a document by a given number of positions (which may -- also be negative). nest satisfies the laws: -- --
nest 0 x = x
nest k (nest k' x) = nest (k+k') -- x
nest k (x <> y) = nest k x -- <> nest k y
nest k (x $$ y) = nest k x $$ -- nest k y
nest k empty = empty
-- hang d1 n d2 = sep [d1, nest n d2] --hang :: Doc -> Int -> Doc -> Doc -- |
-- punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn] --punctuate :: Doc -> [Doc] -> [Doc] -- | Returns True if the document is empty isEmpty :: Doc -> Bool -- | first returns its first argument if it is non-empty, -- otherwise its second. first :: Doc -> Doc -> Doc -- | Perform some simplification of a built up GDoc. reduceDoc :: Doc -> RDoc -- | Render the Doc to a String using the default Style -- (see style). render :: Doc -> String -- | A rendering style. Allows us to specify constraints to choose among -- the many different rendering options. data Style Style :: Mode -> Int -> Float -> Style -- | The rendering mode. [mode] :: Style -> Mode -- | Maximum length of a line, in characters. [lineLength] :: Style -> Int -- | Ratio of line length to ribbon length. A ribbon refers to the -- characters on a line excluding indentation. So a -- lineLength of 100, with a ribbonsPerLine of 2.0 -- would only allow up to 50 characters of ribbon to be displayed on a -- line, while allowing it to be indented up to 50 characters. [ribbonsPerLine] :: Style -> Float -- | The default style (mode=PageMode, lineLength=100, -- ribbonsPerLine=1.5). style :: Style -- | Render the Doc to a String using the given Style. renderStyle :: Style -> Doc -> String -- | Rendering mode. data Mode -- | Normal rendering (lineLength and ribbonsPerLine -- respected'). PageMode :: Mode -- | With zig-zag cuts. ZigZagMode :: Mode -- | No indentation, infinitely long lines (lineLength ignored), but -- explicit new lines, i.e., text "one" $$ text "two", are -- respected. LeftMode :: Mode -- | All on one line, lineLength ignored and explicit new lines -- ($$) are turned into spaces. OneLineMode :: Mode -- | The general rendering interface. Please refer to the Style -- and Mode types for a description of rendering mode, line -- length and ribbons. fullRender :: Mode -> Int -> Float -> (TextDetails -> a -> a) -> a -> Doc -> a instance GHC.Generics.Generic Text.PrettyPrint.HughesPJ.Doc instance GHC.Base.Semigroup Text.PrettyPrint.HughesPJ.Doc instance GHC.Base.Monoid Text.PrettyPrint.HughesPJ.Doc instance Data.String.IsString Text.PrettyPrint.HughesPJ.Doc instance GHC.Show.Show Text.PrettyPrint.HughesPJ.Doc instance GHC.Classes.Eq Text.PrettyPrint.HughesPJ.Doc instance Control.DeepSeq.NFData Text.PrettyPrint.HughesPJ.Doc -- | Provides a collection of pretty printer combinators, a set of API's -- that provides a way to easily print out text in a consistent format of -- your choosing. -- -- This module should be used as opposed to the HughesPJ 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. text -- satisfies the following laws: -- -- -- -- The side condition on the last law is necessary because -- text "" has height 1, while empty has no -- height. text :: String -> Doc -- | Same as text. Used to be used for Bytestrings. ptext :: String -> Doc -- | Some text with any width. (text s = sizedText (length s) s) 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. empty is the -- identity for <>, <+>, $$ and -- $+$, and anywhere in the argument list for sep, -- hcat, hsep, vcat, fcat etc. empty :: Doc -- | Beside. <> is associative, with identity empty. (<>) :: Doc -> Doc -> Doc infixl 6 <> -- | Beside, separated by space, unless one of the arguments is -- empty. <+> is associative, with identity -- empty. (<+>) :: Doc -> Doc -> Doc infixl 6 <+> -- | List version of <>. hcat :: [Doc] -> Doc -- | List version of <+>. 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: -- --
-- text "hi" $$ nest 5 (text "there") ---- -- lays out as -- --
-- hi there ---- -- rather than -- --
-- hi -- there ---- -- $$ is associative, with identity empty, and also -- satisfies -- -- ($$) :: Doc -> Doc -> Doc infixl 5 $$ -- | Above, with no overlapping. $+$ is associative, with identity -- empty. ($+$) :: Doc -> Doc -> Doc infixl 5 $+$ -- | List version of $$. vcat :: [Doc] -> Doc -- | Either hsep or vcat. sep :: [Doc] -> Doc -- | Either hcat or vcat. cat :: [Doc] -> Doc -- | "Paragraph fill" version of sep. fsep :: [Doc] -> Doc -- | "Paragraph fill" version of cat. fcat :: [Doc] -> Doc -- | Nest (or indent) a document by a given number of positions (which may -- also be negative). nest satisfies the laws: -- --
nest 0 x = x
nest k (nest k' x) = nest (k+k') -- x
nest k (x <> y) = nest k x -- <> nest k y
nest k (x $$ y) = nest k x $$ -- nest k y
nest k empty = empty
-- hang d1 n d2 = sep [d1, nest n d2] --hang :: Doc -> Int -> Doc -> Doc -- |
-- punctuate p [d1, ... dn] = [d1 <> p, d2 <> p, ... dn-1 <> p, dn] --punctuate :: Doc -> [Doc] -> [Doc] -- | Returns True if the document is empty isEmpty :: Doc -> Bool -- | Render the Doc to a String using the default Style -- (see style). render :: Doc -> String -- | A rendering style. Allows us to specify constraints to choose among -- the many different rendering options. data Style Style :: Mode -> Int -> Float -> Style -- | The rendering mode. [mode] :: Style -> Mode -- | Maximum length of a line, in characters. [lineLength] :: Style -> Int -- | Ratio of line length to ribbon length. A ribbon refers to the -- characters on a line excluding indentation. So a -- lineLength of 100, with a ribbonsPerLine of 2.0 -- would only allow up to 50 characters of ribbon to be displayed on a -- line, while allowing it to be indented up to 50 characters. [ribbonsPerLine] :: Style -> Float -- | The default style (mode=PageMode, lineLength=100, -- ribbonsPerLine=1.5). style :: Style -- | Render the Doc to a String using the given Style. renderStyle :: Style -> Doc -> String -- | The general rendering interface. Please refer to the Style -- and Mode types for a description of rendering mode, line -- length and ribbons. fullRender :: Mode -> Int -> Float -> (TextDetails -> a -> a) -> a -> Doc -> a -- | Rendering mode. data Mode -- | Normal rendering (lineLength and ribbonsPerLine -- respected'). PageMode :: Mode -- | With zig-zag cuts. ZigZagMode :: Mode -- | No indentation, infinitely long lines (lineLength ignored), but -- explicit new lines, i.e., text "one" $$ text "two", are -- respected. LeftMode :: Mode -- | All on one line, lineLength ignored and explicit new lines -- ($$) are turned into spaces. OneLineMode :: Mode -- | A TextDetails represents a fragment of text that will be output at -- some point in a Doc. 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 -- | Pretty printing class, simlar to Show but nicer looking. -- -- Note that the precedence level is a Rational so there is an -- unlimited number of levels. This module re-exports HughesPJ. module Text.PrettyPrint.HughesPJClass -- | Pretty printing class. The precedence level is used in a similar way -- as in the Show class. Minimal complete definition is either -- pPrintPrec or pPrint. class Pretty a pPrintPrec :: Pretty a => PrettyLevel -> Rational -> a -> Doc pPrint :: Pretty a => a -> Doc pPrintList :: Pretty a => PrettyLevel -> [a] -> Doc -- | Level of detail in the pretty printed output. Level 0 is the least -- detail. newtype PrettyLevel PrettyLevel :: Int -> PrettyLevel -- | The "normal" (Level 0) of detail. prettyNormal :: PrettyLevel -- | Pretty print a value with the prettyNormal level. prettyShow :: Pretty a => a -> String -- | Parenthesize an value if the boolean is true. -- | Deprecated: Please use maybeParens instead prettyParen :: Bool -> Doc -> Doc instance GHC.Show.Show Text.PrettyPrint.HughesPJClass.PrettyLevel instance GHC.Classes.Ord Text.PrettyPrint.HughesPJClass.PrettyLevel instance GHC.Classes.Eq Text.PrettyPrint.HughesPJClass.PrettyLevel instance Text.PrettyPrint.HughesPJClass.Pretty GHC.Types.Int instance Text.PrettyPrint.HughesPJClass.Pretty GHC.Integer.Type.Integer instance Text.PrettyPrint.HughesPJClass.Pretty GHC.Types.Float instance Text.PrettyPrint.HughesPJClass.Pretty GHC.Types.Double instance Text.PrettyPrint.HughesPJClass.Pretty () instance Text.PrettyPrint.HughesPJClass.Pretty GHC.Types.Bool instance Text.PrettyPrint.HughesPJClass.Pretty GHC.Types.Ordering instance Text.PrettyPrint.HughesPJClass.Pretty GHC.Types.Char instance Text.PrettyPrint.HughesPJClass.Pretty a => Text.PrettyPrint.HughesPJClass.Pretty (GHC.Maybe.Maybe a) instance (Text.PrettyPrint.HughesPJClass.Pretty a, Text.PrettyPrint.HughesPJClass.Pretty b) => Text.PrettyPrint.HughesPJClass.Pretty (Data.Either.Either a b) instance Text.PrettyPrint.HughesPJClass.Pretty a => Text.PrettyPrint.HughesPJClass.Pretty [a] instance (Text.PrettyPrint.HughesPJClass.Pretty a, Text.PrettyPrint.HughesPJClass.Pretty b) => Text.PrettyPrint.HughesPJClass.Pretty (a, b) instance (Text.PrettyPrint.HughesPJClass.Pretty a, Text.PrettyPrint.HughesPJClass.Pretty b, Text.PrettyPrint.HughesPJClass.Pretty c) => Text.PrettyPrint.HughesPJClass.Pretty (a, b, c) instance (Text.PrettyPrint.HughesPJClass.Pretty a, Text.PrettyPrint.HughesPJClass.Pretty b, Text.PrettyPrint.HughesPJClass.Pretty c, Text.PrettyPrint.HughesPJClass.Pretty d) => Text.PrettyPrint.HughesPJClass.Pretty (a, b, c, d) instance (Text.PrettyPrint.HughesPJClass.Pretty a, Text.PrettyPrint.HughesPJClass.Pretty b, Text.PrettyPrint.HughesPJClass.Pretty c, Text.PrettyPrint.HughesPJClass.Pretty d, Text.PrettyPrint.HughesPJClass.Pretty e) => Text.PrettyPrint.HughesPJClass.Pretty (a, b, c, d, e) instance (Text.PrettyPrint.HughesPJClass.Pretty a, Text.PrettyPrint.HughesPJClass.Pretty b, Text.PrettyPrint.HughesPJClass.Pretty c, Text.PrettyPrint.HughesPJClass.Pretty d, Text.PrettyPrint.HughesPJClass.Pretty e, Text.PrettyPrint.HughesPJClass.Pretty f) => Text.PrettyPrint.HughesPJClass.Pretty (a, b, c, d, e, f) instance (Text.PrettyPrint.HughesPJClass.Pretty a, Text.PrettyPrint.HughesPJClass.Pretty b, Text.PrettyPrint.HughesPJClass.Pretty c, Text.PrettyPrint.HughesPJClass.Pretty d, Text.PrettyPrint.HughesPJClass.Pretty e, Text.PrettyPrint.HughesPJClass.Pretty f, Text.PrettyPrint.HughesPJClass.Pretty g) => Text.PrettyPrint.HughesPJClass.Pretty (a, b, c, d, e, f, g) instance (Text.PrettyPrint.HughesPJClass.Pretty a, Text.PrettyPrint.HughesPJClass.Pretty b, Text.PrettyPrint.HughesPJClass.Pretty c, Text.PrettyPrint.HughesPJClass.Pretty d, Text.PrettyPrint.HughesPJClass.Pretty e, Text.PrettyPrint.HughesPJClass.Pretty f, Text.PrettyPrint.HughesPJClass.Pretty g, Text.PrettyPrint.HughesPJClass.Pretty h) => Text.PrettyPrint.HughesPJClass.Pretty (a, b, c, d, e, f, g, h)