GenericPretty-1.2.2: A generic, derivable, haskell pretty printer.

Safe HaskellSafe
LanguageHaskell98

Text.PrettyPrint.GenericPretty

Description

GenericPretty is a Haskell library that supports automatic derivation of pretty printing functions on user defined data types.

The output provided is a pretty printed version of that provided by show. That is, rendering the document provided by this pretty printer yields an output identical to that of show, except for extra whitespace.

For examples of usage please see the README file included in the package.

For more information see the HackageDB project page: http://hackage.haskell.org/package/GenericPretty

Synopsis

Documentation

class Out a where Source #

The class Out is the equivalent of Show

It provides conversion of values to pretty printable Pretty.Doc's.

Minimal complete definition: docPrec or doc.

Derived instances of Out have the following properties

  • The result of docPrec is a syntactically correct Haskell expression containing only constants, given the fixity declarations in force at the point where the type is declared. It contains only the constructor names defined in the data type, parentheses, and spaces. When labelled constructor fields are used, braces, commas, field names, and equal signs are also used.
  • If the constructor is defined to be an infix operator, then docPrec will produce infix applications of the constructor.
  • the representation will be enclosed in parentheses if the precedence of the top-level constructor in x is less than d (associativity is ignored). Thus, if d is 0 then the result is never surrounded in parentheses; if d is 11 it is always surrounded in parentheses, unless it is an atomic expression.
  • If the constructor is defined using record syntax, then docPrec will produce the record-syntax form, with the fields given in the same order as the original declaration.

For example, given the declarations

data Tree a =  Leaf a  |  Node (Tree a) (Tree a) deriving (Generic)

The derived instance of Out is equivalent to:

instance (Out a) => Out (Tree a) where
 
        docPrec d (Leaf m) = Pretty.sep $ wrapParens (d > appPrec) $
             text "Leaf" : [nest (constrLen + parenLen) (docPrec (appPrec+1) m)]
          where appPrec = 10
                constrLen = 5;
                parenLen = if(d > appPrec) then 1 else 0

        docPrec d (Node u v) = Pretty.sep $ wrapParens (d > appPrec) $
             text "Node" : 
             nest (constrLen + parenLen) (docPrec (appPrec+1) u) : 
             [nest (constrLen + parenLen) (docPrec (appPrec+1) v)]
          where appPrec = 10
                constrLen = 5
                parenLen = if(d > appPrec) then 1 else 0

Methods

docPrec Source #

Arguments

:: Int

the operator precedence of the enclosing context (a number from 0 to 11). Function application has precedence 10.

-> a

the value to be converted to a String

-> Doc

the resulting Doc

docPrec is the equivalent of showsPrec.

Convert a value to a pretty printable Doc.

docPrec Source #

Arguments

:: (Generic a, GOut (Rep a)) 
=> Int

the operator precedence of the enclosing context (a number from 0 to 11). Function application has precedence 10.

-> a

the value to be converted to a String

-> Doc

the resulting Doc

docPrec is the equivalent of showsPrec.

Convert a value to a pretty printable Doc.

doc :: a -> Doc Source #

doc is the equivalent of show

This is a specialised variant of docPrec, using precedence context zero.

doc :: (Generic a, GOut (Rep a)) => a -> Doc Source #

doc is the equivalent of show

This is a specialised variant of docPrec, using precedence context zero.

docList :: [a] -> Doc Source #

docList is the equivalent of showList.

The method docList is provided to allow the programmer to give a specialised way of showing lists of values. For example, this is used by the predefined Out instance of the Char type, where values of type String should be shown in double quotes, rather than between square brackets.

Instances
Out Bool Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Methods

docPrec :: Int -> Bool -> Doc Source #

doc :: Bool -> Doc Source #

docList :: [Bool] -> Doc Source #

Out Char Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Methods

docPrec :: Int -> Char -> Doc Source #

doc :: Char -> Doc Source #

docList :: [Char] -> Doc Source #

Out Double Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Out Float Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Out Int Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Methods

docPrec :: Int -> Int -> Doc Source #

doc :: Int -> Doc Source #

docList :: [Int] -> Doc Source #

Out Integer Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Out Rational Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Out () Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Methods

docPrec :: Int -> () -> Doc Source #

doc :: () -> Doc Source #

docList :: [()] -> Doc Source #

Out a => Out [a] Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Methods

docPrec :: Int -> [a] -> Doc Source #

doc :: [a] -> Doc Source #

docList :: [[a]] -> Doc Source #

Out a => Out (Maybe a) Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Methods

docPrec :: Int -> Maybe a -> Doc Source #

doc :: Maybe a -> Doc Source #

docList :: [Maybe a] -> Doc Source #

(Out a, Out b) => Out (Either a b) Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Methods

docPrec :: Int -> Either a b -> Doc Source #

doc :: Either a b -> Doc Source #

docList :: [Either a b] -> Doc Source #

(Out a, Out b) => Out (a, b) Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Methods

docPrec :: Int -> (a, b) -> Doc Source #

doc :: (a, b) -> Doc Source #

docList :: [(a, b)] -> Doc Source #

(Out a, Out b, Out c) => Out (a, b, c) Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Methods

docPrec :: Int -> (a, b, c) -> Doc Source #

doc :: (a, b, c) -> Doc Source #

docList :: [(a, b, c)] -> Doc Source #

(Out a, Out b, Out c, Out d) => Out (a, b, c, d) Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Methods

docPrec :: Int -> (a, b, c, d) -> Doc Source #

doc :: (a, b, c, d) -> Doc Source #

docList :: [(a, b, c, d)] -> Doc Source #

(Out a, Out b, Out c, Out d, Out e) => Out (a, b, c, d, e) Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Methods

docPrec :: Int -> (a, b, c, d, e) -> Doc Source #

doc :: (a, b, c, d, e) -> Doc Source #

docList :: [(a, b, c, d, e)] -> Doc Source #

(Out a, Out b, Out c, Out d, Out e, Out f) => Out (a, b, c, d, e, f) Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Methods

docPrec :: Int -> (a, b, c, d, e, f) -> Doc Source #

doc :: (a, b, c, d, e, f) -> Doc Source #

docList :: [(a, b, c, d, e, f)] -> Doc Source #

(Out a, Out b, Out c, Out d, Out e, Out f, Out g) => Out (a, b, c, d, e, f, g) Source # 
Instance details

Defined in Text.PrettyPrint.GenericPretty

Methods

docPrec :: Int -> (a, b, c, d, e, f, g) -> Doc Source #

doc :: (a, b, c, d, e, f, g) -> Doc Source #

docList :: [(a, b, c, d, e, f, g)] -> Doc Source #

pp :: Out a => a -> IO () Source #

The default Pretty Printer,

Equivalent to:

ppStyle defaultStyle

Where defaultStyle = (mode=PageMode, lineLength=80, ribbonsPerLine=1.5)

ppLen :: Out a => Int -> a -> IO () Source #

Semi-customizable pretty printer.

Equivalent to:

ppStyle customStyle

Where customStyle uses the specified line length, mode = PageMode and ribbonsPerLine = 1.

ppStyle :: Out a => Style -> a -> IO () Source #

Customizable pretty printer.

Takes a user defined Style as a parameter and uses outputIO to obtain the result Equivalent to:

fullPP outputIO (putChar '\n')

pretty :: Out a => a -> String Source #

The default pretty printer returning Strings

Equivalent to

prettyStyle defaultStyle

Where defaultStyle = (mode=PageMode, lineLength=80, ribbonsPerLine=1.5)

prettyLen :: Out a => Int -> a -> String Source #

Semi-customizable pretty printer.

Equivalent to:

prettyStyle customStyle

Where customStyle uses the specified line length, mode = PageMode and ribbonsPerLine = 1.

prettyStyle :: Out a => Style -> a -> String Source #

Customizable pretty printer

Takes a user defined Style as a parameter and uses outputStr to obtain the result Equivalent to:

fullPP outputStr ""

fullPP Source #

Arguments

:: Out a 
=> (TextDetails -> b -> b)

Function that handles the text conversion (eg: outputIO)

-> b

The end element of the result ( eg: "" or putChar('\n') )

-> Style

The pretty printing Style to use

-> a

The value to pretty print

-> b

The pretty printed result

fullPP is a fully customizable Pretty Printer

Every other pretty printer just gives some default values to fullPP

class Generic a #

Representable types of kind *. This class is derivable in GHC with the DeriveGeneric flag on.

A Generic instance must satisfy the following laws:

from . toid
to . fromid

Minimal complete definition

from, to

Instances
Generic Bool 
Instance details

Defined in GHC.Generics

Associated Types

type Rep Bool :: * -> * #

Methods

from :: Bool -> Rep Bool x #

to :: Rep Bool x -> Bool #

Generic Ordering 
Instance details

Defined in GHC.Generics

Associated Types

type Rep Ordering :: * -> * #

Methods

from :: Ordering -> Rep Ordering x #

to :: Rep Ordering x -> Ordering #

Generic () 
Instance details

Defined in GHC.Generics

Associated Types

type Rep () :: * -> * #

Methods

from :: () -> Rep () x #

to :: Rep () x -> () #

Generic ExitCode 
Instance details

Defined in GHC.IO.Exception

Associated Types

type Rep ExitCode :: * -> * #

Methods

from :: ExitCode -> Rep ExitCode x #

to :: Rep ExitCode x -> ExitCode #

Generic Fixity 
Instance details

Defined in GHC.Generics

Associated Types

type Rep Fixity :: * -> * #

Methods

from :: Fixity -> Rep Fixity x #

to :: Rep Fixity x -> Fixity #

Generic Associativity 
Instance details

Defined in GHC.Generics

Associated Types

type Rep Associativity :: * -> * #

Generic SourceUnpackedness 
Instance details

Defined in GHC.Generics

Associated Types

type Rep SourceUnpackedness :: * -> * #

Generic SourceStrictness 
Instance details

Defined in GHC.Generics

Associated Types

type Rep SourceStrictness :: * -> * #

Generic DecidedStrictness 
Instance details

Defined in GHC.Generics

Associated Types

type Rep DecidedStrictness :: * -> * #

Generic Doc 
Instance details

Defined in Text.PrettyPrint.HughesPJ

Associated Types

type Rep Doc :: * -> * #

Methods

from :: Doc -> Rep Doc x #

to :: Rep Doc x -> Doc #

Generic TextDetails 
Instance details

Defined in Text.PrettyPrint.Annotated.HughesPJ

Associated Types

type Rep TextDetails :: * -> * #

Generic Style 
Instance details

Defined in Text.PrettyPrint.Annotated.HughesPJ

Associated Types

type Rep Style :: * -> * #

Methods

from :: Style -> Rep Style x #

to :: Rep Style x -> Style #

Generic Mode 
Instance details

Defined in Text.PrettyPrint.Annotated.HughesPJ

Associated Types

type Rep Mode :: * -> * #

Methods

from :: Mode -> Rep Mode x #

to :: Rep Mode x -> Mode #

Generic [a] 
Instance details

Defined in GHC.Generics

Associated Types

type Rep [a] :: * -> * #

Methods

from :: [a] -> Rep [a] x #

to :: Rep [a] x -> [a] #

Generic (Maybe a) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (Maybe a) :: * -> * #

Methods

from :: Maybe a -> Rep (Maybe a) x #

to :: Rep (Maybe a) x -> Maybe a #

Generic (Par1 p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (Par1 p) :: * -> * #

Methods

from :: Par1 p -> Rep (Par1 p) x #

to :: Rep (Par1 p) x -> Par1 p #

Generic (NonEmpty a) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (NonEmpty a) :: * -> * #

Methods

from :: NonEmpty a -> Rep (NonEmpty a) x #

to :: Rep (NonEmpty a) x -> NonEmpty a #

Generic (Doc a) 
Instance details

Defined in Text.PrettyPrint.Annotated.HughesPJ

Associated Types

type Rep (Doc a) :: * -> * #

Methods

from :: Doc a -> Rep (Doc a) x #

to :: Rep (Doc a) x -> Doc a #

Generic (Either a b) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (Either a b) :: * -> * #

Methods

from :: Either a b -> Rep (Either a b) x #

to :: Rep (Either a b) x -> Either a b #

Generic (V1 p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (V1 p) :: * -> * #

Methods

from :: V1 p -> Rep (V1 p) x #

to :: Rep (V1 p) x -> V1 p #

Generic (U1 p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (U1 p) :: * -> * #

Methods

from :: U1 p -> Rep (U1 p) x #

to :: Rep (U1 p) x -> U1 p #

Generic (a, b) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (a, b) :: * -> * #

Methods

from :: (a, b) -> Rep (a, b) x #

to :: Rep (a, b) x -> (a, b) #

Generic (Proxy t) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (Proxy t) :: * -> * #

Methods

from :: Proxy t -> Rep (Proxy t) x #

to :: Rep (Proxy t) x -> Proxy t #

Generic (Rec1 f p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (Rec1 f p) :: * -> * #

Methods

from :: Rec1 f p -> Rep (Rec1 f p) x #

to :: Rep (Rec1 f p) x -> Rec1 f p #

Generic (URec (Ptr ()) p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (URec (Ptr ()) p) :: * -> * #

Methods

from :: URec (Ptr ()) p -> Rep (URec (Ptr ()) p) x #

to :: Rep (URec (Ptr ()) p) x -> URec (Ptr ()) p #

Generic (URec Char p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (URec Char p) :: * -> * #

Methods

from :: URec Char p -> Rep (URec Char p) x #

to :: Rep (URec Char p) x -> URec Char p #

Generic (URec Double p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (URec Double p) :: * -> * #

Methods

from :: URec Double p -> Rep (URec Double p) x #

to :: Rep (URec Double p) x -> URec Double p #

Generic (URec Float p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (URec Float p) :: * -> * #

Methods

from :: URec Float p -> Rep (URec Float p) x #

to :: Rep (URec Float p) x -> URec Float p #

Generic (URec Int p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (URec Int p) :: * -> * #

Methods

from :: URec Int p -> Rep (URec Int p) x #

to :: Rep (URec Int p) x -> URec Int p #

Generic (URec Word p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (URec Word p) :: * -> * #

Methods

from :: URec Word p -> Rep (URec Word p) x #

to :: Rep (URec Word p) x -> URec Word p #

Generic (a, b, c) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (a, b, c) :: * -> * #

Methods

from :: (a, b, c) -> Rep (a, b, c) x #

to :: Rep (a, b, c) x -> (a, b, c) #

Generic (K1 i c p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (K1 i c p) :: * -> * #

Methods

from :: K1 i c p -> Rep (K1 i c p) x #

to :: Rep (K1 i c p) x -> K1 i c p #

Generic ((f :+: g) p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep ((f :+: g) p) :: * -> * #

Methods

from :: (f :+: g) p -> Rep ((f :+: g) p) x #

to :: Rep ((f :+: g) p) x -> (f :+: g) p #

Generic ((f :*: g) p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep ((f :*: g) p) :: * -> * #

Methods

from :: (f :*: g) p -> Rep ((f :*: g) p) x #

to :: Rep ((f :*: g) p) x -> (f :*: g) p #

Generic (a, b, c, d) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (a, b, c, d) :: * -> * #

Methods

from :: (a, b, c, d) -> Rep (a, b, c, d) x #

to :: Rep (a, b, c, d) x -> (a, b, c, d) #

Generic (M1 i c f p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (M1 i c f p) :: * -> * #

Methods

from :: M1 i c f p -> Rep (M1 i c f p) x #

to :: Rep (M1 i c f p) x -> M1 i c f p #

Generic ((f :.: g) p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep ((f :.: g) p) :: * -> * #

Methods

from :: (f :.: g) p -> Rep ((f :.: g) p) x #

to :: Rep ((f :.: g) p) x -> (f :.: g) p #

Generic (a, b, c, d, e) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (a, b, c, d, e) :: * -> * #

Methods

from :: (a, b, c, d, e) -> Rep (a, b, c, d, e) x #

to :: Rep (a, b, c, d, e) x -> (a, b, c, d, e) #

Generic (a, b, c, d, e, f) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (a, b, c, d, e, f) :: * -> * #

Methods

from :: (a, b, c, d, e, f) -> Rep (a, b, c, d, e, f) x #

to :: Rep (a, b, c, d, e, f) x -> (a, b, c, d, e, f) #

Generic (a, b, c, d, e, f, g) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (a, b, c, d, e, f, g) :: * -> * #

Methods

from :: (a, b, c, d, e, f, g) -> Rep (a, b, c, d, e, f, g) x #

to :: Rep (a, b, c, d, e, f, g) x -> (a, b, c, d, e, f, g) #

outputIO :: TextDetails -> IO () -> IO () Source #

Utility function that handles the text conversion for fullPP.

outputIO transforms the text into Strings and outputs it directly.

outputStr :: TextDetails -> String -> String Source #

Utility function that handles the text conversion for fullPP.

outputStr just leaves the text as a String which is usefull if you want to further process the pretty printed result.