Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Silkscreen is a library of pretty-printing transformers built around the prettyprinter package. This module defines the core Printer
abstraction and a few instances.
More documentation can be found in Prettyprinter.
Synopsis
- class Monoid p => Printer p where
- type Ann p
- liftDoc0 :: Doc (Ann p) -> p
- liftDoc1 :: (Doc (Ann p) -> Doc (Ann p)) -> p -> p
- liftDoc2 :: (Doc (Ann p) -> Doc (Ann p) -> Doc (Ann p)) -> p -> p -> p
- enclosing :: p -> p -> p -> p
- squotes :: p -> p
- dquotes :: p -> p
- parens :: p -> p
- brackets :: p -> p
- braces :: p -> p
- angles :: p -> p
- column :: (Int -> p) -> p
- nesting :: (Int -> p) -> p
- pageWidth :: (PageWidth -> p) -> p
- pretty :: (Printer p, Pretty t) => t -> p
- prettyList :: (Printer p, Pretty t) => [t] -> p
- annotate :: Printer p => Ann p -> p -> p
- group :: Printer p => p -> p
- flatAlt :: Printer p => p -> p -> p
- align :: Printer p => p -> p
- hang :: Printer p => Int -> p -> p
- indent :: Printer p => Int -> p -> p
- nest :: Printer p => Int -> p -> p
- concatWith :: (Monoid p, Foldable t) => (p -> p -> p) -> t p -> p
- hsep :: Printer p => [p] -> p
- vsep :: Printer p => [p] -> p
- fillSep :: Printer p => [p] -> p
- sep :: Printer p => [p] -> p
- hcat :: Printer p => [p] -> p
- vcat :: Printer p => [p] -> p
- fillCat :: Printer p => [p] -> p
- cat :: Printer p => [p] -> p
- punctuate :: Printer p => p -> [p] -> [p]
- width :: Printer p => p -> (Int -> p) -> p
- fill :: Printer p => Int -> p -> p
- fillBreak :: Printer p => Int -> p -> p
- plural :: (Num amount, Eq amount) => doc -> doc -> amount -> doc
- enclose :: Printer p => p -> p -> p -> p
- encloseSep :: Printer p => p -> p -> p -> [p] -> p
- list :: Printer p => [p] -> p
- tupled :: Printer p => [p] -> p
- surround :: Printer p => p -> p -> p -> p
- (<+>) :: Printer p => p -> p -> p
- (</>) :: Printer p => p -> p -> p
- parensIf :: Printer p => Bool -> p -> p
- space :: Printer p => p
- line :: Printer p => p
- line' :: Printer p => p
- softline :: Printer p => p
- softline' :: Printer p => p
- hardline :: Printer p => p
- lparen :: Printer p => p
- rparen :: Printer p => p
- lbracket :: Printer p => p
- rbracket :: Printer p => p
- lbrace :: Printer p => p
- rbrace :: Printer p => p
- langle :: Printer p => p
- rangle :: Printer p => p
- squote :: Printer p => p
- dquote :: Printer p => p
- semi :: Printer p => p
- comma :: Printer p => p
- colon :: Printer p => p
- dot :: Printer p => p
- slash :: Printer p => p
- backslash :: Printer p => p
- equals :: Printer p => p
- pipe :: Printer p => p
- class Pretty a
- data PageWidth
Printing
class Monoid p => Printer p where Source #
A Printer
abstracts pretty-printing to allow the composition of behaviours such as e.g. rainbow parentheses, precedence handling, and so forth.
The type of annotations supported by the printer.
We provide this as a type family instead of defining Printer
over kind Type -> Type
in order to allow instances to constrain annotations.
liftDoc0 :: Doc (Ann p) -> p Source #
Lift a Doc
to a Printer
.
liftDoc1 :: (Doc (Ann p) -> Doc (Ann p)) -> p -> p Source #
Lift a unary function on Doc
to a Printer
.
liftDoc2 :: (Doc (Ann p) -> Doc (Ann p) -> Doc (Ann p)) -> p -> p -> p Source #
Lift a binary function on Doc
to a Printer
.
enclosing :: p -> p -> p -> p Source #
wraps enclosing
l r xx
in l
and r
.
Distinct from enclose
(which is not overloaded) so that enclose
remains available as a convenience for appending documents without whatever extra semantics are implied by any particular Printer
(rainbow precedences, resetting precedence, etc.).
Overloadable to support e.g. rainbow parentheses.
Wrap the argument in single quotes.
The default definition is given in terms of enclosing
. Overloadable to support e.g. rainbow quotes (or disabling of same, if desired).
Wrap the argument in double quotes.
The default definition is given in terms of enclosing
. Overloadable to support e.g. rainbow quotes (or disabling of same, if desired).
Parenthesize the argument.
The default definition is given in terms of enclosing
. Overloadable to support e.g. rainbow parentheses (or disabling of same, if desired).
Wrap the argument in brackets.
The default definition is given in terms of enclosing
. Overloadable to support e.g. rainbow brackets (or disabling of same, if desired).
Wrap the argument in braces.
The default definition is given in terms of enclosing
. Overloadable to support e.g. rainbow braces (or disabling of same, if desired).
Wrap the argument in angle brackets.
The default definition is given in terms of enclosing
. Overloadable to support e.g. rainbow angle brackets (or disabling of same, if desired).
column :: (Int -> p) -> p Source #
Instances
Printer (Doc ann) Source # | |
Defined in Silkscreen liftDoc0 :: Doc (Ann (Doc ann)) -> Doc ann Source # liftDoc1 :: (Doc (Ann (Doc ann)) -> Doc (Ann (Doc ann))) -> Doc ann -> Doc ann Source # liftDoc2 :: (Doc (Ann (Doc ann)) -> Doc (Ann (Doc ann)) -> Doc (Ann (Doc ann))) -> Doc ann -> Doc ann -> Doc ann Source # enclosing :: Doc ann -> Doc ann -> Doc ann -> Doc ann Source # squotes :: Doc ann -> Doc ann Source # dquotes :: Doc ann -> Doc ann Source # parens :: Doc ann -> Doc ann Source # brackets :: Doc ann -> Doc ann Source # braces :: Doc ann -> Doc ann Source # angles :: Doc ann -> Doc ann Source # column :: (Int -> Doc ann) -> Doc ann Source # | |
Printer a => Printer (Rainbow a) Source # | |
Defined in Silkscreen.Printer.Rainbow liftDoc0 :: Doc (Ann (Rainbow a)) -> Rainbow a Source # liftDoc1 :: (Doc (Ann (Rainbow a)) -> Doc (Ann (Rainbow a))) -> Rainbow a -> Rainbow a Source # liftDoc2 :: (Doc (Ann (Rainbow a)) -> Doc (Ann (Rainbow a)) -> Doc (Ann (Rainbow a))) -> Rainbow a -> Rainbow a -> Rainbow a Source # enclosing :: Rainbow a -> Rainbow a -> Rainbow a -> Rainbow a Source # squotes :: Rainbow a -> Rainbow a Source # dquotes :: Rainbow a -> Rainbow a Source # parens :: Rainbow a -> Rainbow a Source # brackets :: Rainbow a -> Rainbow a Source # braces :: Rainbow a -> Rainbow a Source # angles :: Rainbow a -> Rainbow a Source # column :: (Int -> Rainbow a) -> Rainbow a Source # | |
Printer b => Printer (a -> b) Source # | |
Defined in Silkscreen liftDoc0 :: Doc (Ann (a -> b)) -> a -> b Source # liftDoc1 :: (Doc (Ann (a -> b)) -> Doc (Ann (a -> b))) -> (a -> b) -> a -> b Source # liftDoc2 :: (Doc (Ann (a -> b)) -> Doc (Ann (a -> b)) -> Doc (Ann (a -> b))) -> (a -> b) -> (a -> b) -> a -> b Source # enclosing :: (a -> b) -> (a -> b) -> (a -> b) -> a -> b Source # squotes :: (a -> b) -> a -> b Source # dquotes :: (a -> b) -> a -> b Source # parens :: (a -> b) -> a -> b Source # brackets :: (a -> b) -> a -> b Source # braces :: (a -> b) -> a -> b Source # angles :: (a -> b) -> a -> b Source # column :: (Int -> a -> b) -> a -> b Source # | |
(Printer a, Printer b, Ann a ~ Ann b) => Printer (a, b) Source # | |
Defined in Silkscreen liftDoc0 :: Doc (Ann (a, b)) -> (a, b) Source # liftDoc1 :: (Doc (Ann (a, b)) -> Doc (Ann (a, b))) -> (a, b) -> (a, b) Source # liftDoc2 :: (Doc (Ann (a, b)) -> Doc (Ann (a, b)) -> Doc (Ann (a, b))) -> (a, b) -> (a, b) -> (a, b) Source # enclosing :: (a, b) -> (a, b) -> (a, b) -> (a, b) Source # squotes :: (a, b) -> (a, b) Source # dquotes :: (a, b) -> (a, b) Source # parens :: (a, b) -> (a, b) Source # brackets :: (a, b) -> (a, b) Source # braces :: (a, b) -> (a, b) Source # angles :: (a, b) -> (a, b) Source # column :: (Int -> (a, b)) -> (a, b) Source # | |
(Bounded level, Printer a) => Printer (Prec level a) Source # | |
Defined in Silkscreen.Printer.Prec liftDoc0 :: Doc (Ann (Prec level a)) -> Prec level a Source # liftDoc1 :: (Doc (Ann (Prec level a)) -> Doc (Ann (Prec level a))) -> Prec level a -> Prec level a Source # liftDoc2 :: (Doc (Ann (Prec level a)) -> Doc (Ann (Prec level a)) -> Doc (Ann (Prec level a))) -> Prec level a -> Prec level a -> Prec level a Source # enclosing :: Prec level a -> Prec level a -> Prec level a -> Prec level a Source # squotes :: Prec level a -> Prec level a Source # dquotes :: Prec level a -> Prec level a Source # parens :: Prec level a -> Prec level a Source # brackets :: Prec level a -> Prec level a Source # braces :: Prec level a -> Prec level a Source # angles :: Prec level a -> Prec level a Source # column :: (Int -> Prec level a) -> Prec level a Source # nesting :: (Int -> Prec level a) -> Prec level a Source # pageWidth :: (PageWidth -> Prec level a) -> Prec level a Source # |
Combinators
pretty :: (Printer p, Pretty t) => t -> p Source #
Pretty-print a value using the Pretty
instance for its type.
prettyList :: (Printer p, Pretty t) => [t] -> p Source #
flatAlt :: Printer p => p -> p -> p Source #
Print the first argument by default, or the second when an enclosing group
flattens it.
hang :: Printer p => Int -> p -> p Source #
Indent following lines in the argument to the current column + some delta.
indent :: Printer p => Int -> p -> p Source #
Indent lines in the argument to the current column + some delta.
nest :: Printer p => Int -> p -> p Source #
changes the indentation level for new lines in nest
i pp
by i
.
concatWith :: (Monoid p, Foldable t) => (p -> p -> p) -> t p -> p Source #
encloseSep :: Printer p => p -> p -> p -> [p] -> p Source #
Conditional combinators
parensIf :: Printer p => Bool -> p -> p Source #
Conditional parenthesization of a printer. Analogous to showParen
, but for printers.
Symbols
Re-exports
pretty