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 |