This library provides pretty-printers for FlatCurry modules and all substructures (e.g., expressions).
Author: Bjoern Peemoeller
Version: November 2020
defaultOptions
:: Options
Default Options
for pretty-printing.
|
ppProg
:: Options -> Prog -> Doc
pretty-print a FlatCurry module |
ppHeader
:: Options -> String -> [TypeDecl] -> [FuncDecl] -> Doc
pretty-print the module header |
ppExports
:: Options -> [TypeDecl] -> [FuncDecl] -> Doc
pretty-print the export list |
ppTypeExport
:: Options -> TypeDecl -> Doc
pretty-print a type export |
ppConsExports
:: Options -> [ConsDecl] -> [Doc]
pretty-print the export list of constructors |
ppFuncExports
:: Options -> [FuncDecl] -> [Doc]
pretty-print the export list of functions |
ppImports
:: Options -> [String] -> Doc
pretty-print a list of import statements |
ppImport
:: Options -> String -> Doc
pretty-print a single import statement |
ppOpDecls
:: Options -> [OpDecl] -> Doc
pretty-print a list of operator fixity declarations |
ppOpDecl
:: Options -> OpDecl -> Doc
pretty-print a single operator fixity declaration |
ppFixity
:: Fixity -> Doc
pretty-print the associativity keyword |
ppTypeDecls
:: Options -> [TypeDecl] -> Doc
pretty-print a list of type declarations |
ppTypeDecl
:: Options -> TypeDecl -> Doc
pretty-print a type declaration |
ppConsDecls
:: Options -> [ConsDecl] -> Doc
pretty-print the constructor declarations |
ppConsDecl
:: Options -> ConsDecl -> Doc
pretty print a single constructor |
ppNewConsDecl
:: Options -> NewConsDecl -> Doc
pretty print a single newtype constructor |
ppTypeExp
:: Options -> TypeExpr -> Doc
pretty a top-level type expression |
ppTypeExpr
:: Options -> Int -> TypeExpr -> Doc
pretty-print a type expression |
ppQuantifiedVars
:: [(Int,Kind)] -> Doc
pretty-print explicitly quantified type variables |
ppTVarIndex
:: Int -> Doc
pretty-print a type variable |
ppFuncDecls
:: Options -> [FuncDecl] -> Doc
pretty-print a list of function declarations |
ppFuncDecl
:: Options -> FuncDecl -> Doc
pretty-print a function declaration |
ppRule
:: Options -> Rule -> Doc
pretty-print a function rule |
ppExp
:: Options -> Expr -> Doc
Pretty-print a top-level expression. |
ppExpr
:: Options -> Int -> Expr -> Doc
pretty-print an expression |
ppVarIndex
:: Int -> Doc
pretty-print a variable |
ppLiteral
:: Literal -> Doc
pretty-print a literal |
ppComb
:: Options -> Int -> (String,String) -> [Expr] -> Doc
Pretty print a constructor or function call |
ppDecls
:: Options -> [(Int,Expr)] -> Doc
pretty-print a list of declarations |
ppDecl
:: Options -> (Int,Expr) -> Doc
pretty-print a single declaration |
ppCaseType
:: CaseType -> Doc
Pretty print the type of a case expression |
ppBranch
:: Options -> BranchExpr -> Doc
Pretty print a case branch |
ppPattern
:: Options -> Pattern -> Doc
Pretty print a pattern |
ppPrefixQOp
:: Options -> (String,String) -> Doc
pretty-print a qualified prefix operator. |
ppPrefixOp
:: (String,String) -> Doc
pretty-print a prefix operator unqualified. |
ppInfixQOp
:: Options -> (String,String) -> Doc
pretty-print an infix operator |
ppQName
:: Options -> (String,String) -> Doc
Pretty-print a qualified name |
ppName
:: (String,String) -> Doc
Pretty-print a qualified name unqualified (e.g., for type definitions). |
isInfixOp
:: (String,String) -> Bool
Check whether an operator is an infix operator |
isConsId
:: (String,String) -> Bool
Check whether an identifier represents the :
list constructor.
|
isListId
:: (String,String) -> Bool
Check whether an identifier represents a list |
isTupleId
:: (String,String) -> Bool
Check whether an identifier represents a tuple |
indent
:: Options -> Doc -> Doc
Indentation |
Options for pretty printing
Constructors:
Options
:: Int -> QualMode -> String -> Options
Fields:
indentWidth
:: Int
: number of columns for indentation of substructures
qualMode
:: QualMode
: Qualification mode of pretty printer
currentModule
:: String
: Name of current module to be pretty-printed, used
for proper qualification
Qualification mode, determines whether identifiers are printed qualified
or unqualified. While QualNone
and QualImports
aim at readability,
there may be ambiguities due to shadowing. On the contrary, QualImports
and QualAll
produce correct output at the cost of readability.
Constructors:
QualNone
:: QualMode
: no qualification, only unqualified names
QualImportsButPrelude
:: QualMode
: qualify all imports except those from
the module Prelude
QualImports
:: QualMode
: qualify all imports, including Prelude
QualAll
:: QualMode
: qualify all names
Default
|
pretty-print a type export
|
pretty-print the export list of constructors |
pretty-print the export list of functions |
pretty-print the associativity keyword
|
pretty-print a list of type declarations |
pretty-print a type declaration |
pretty-print the constructor declarations |
pretty print a single constructor |
pretty print a single newtype constructor |
pretty-print a type expression
|
pretty-print explicitly quantified type variables
|
pretty-print a type variable |
pretty-print a list of function declarations |
pretty-print a function declaration |
pretty-print a variable
|
Pretty print a constructor or function call
|
Pretty print the type of a case expression
|
Pretty print a case branch |
pretty-print a qualified prefix operator. |
pretty-print a prefix operator unqualified. |
pretty-print an infix operator |
Pretty-print a qualified name unqualified (e.g., for type definitions).
|
Check whether an operator is an infix operator |
Check whether an identifier represents the |
Check whether an identifier represents a list |
Check whether an identifier represents a tuple |