module Text.PrettyPrint.Class (
P.Doc
, Document(..)
, P.isEmpty
, P.render
, P.renderStyle
, P.style
, P.Style(..)
, P.Mode(..)
, ($--$)
, semi
, colon
, comma
, space
, equals
, lparen
, rparen
, lbrack
, rbrack
, lbrace
, rbrace
, int
, integer
, float
, double
, rational
, quotes
, doubleQuotes
, parens
, brackets
, braces
, hang
, punctuate
) where
import Prelude
import qualified Text.PrettyPrint.HughesPJ as P
infixl 6 <>
infixl 6 <->
infixl 5 $$, $-$, $--$
class Document d where
char :: Char -> d
text :: String -> d
zeroWidthText :: String -> d
emptyDoc :: d
(<>) :: d -> d -> d
(<->) :: d -> d -> d
hcat :: [d] -> d
hsep :: [d] -> d
($$) :: d -> d -> d
($-$) :: d -> d -> d
vcat :: [d] -> d
sep :: [d] -> d
cat :: [d] -> d
fsep :: [d] -> d
fcat :: [d] -> d
nest :: Int -> d -> d
caseEmptyDoc :: d -> d -> d -> d
instance Document P.Doc where
char = P.char
text = P.text
zeroWidthText = P.zeroWidthText
emptyDoc = P.empty
(<>) = (P.<>)
(<->) = (P.<+>)
hcat = P.hcat
hsep = P.hsep
($$) = (P.$$)
($-$) = (P.$+$)
vcat = P.vcat
sep = P.sep
cat = P.cat
fsep = P.fsep
fcat = P.fcat
nest = P.nest
caseEmptyDoc yes no d = if P.isEmpty d then yes else no
($--$) :: Document d => d -> d -> d
d1 $--$ d2 =
caseEmptyDoc d2 (caseEmptyDoc d1 (d1 $-$ text "" $-$ d2) d2) d1
semi, colon, comma, space, equals,
lparen, rparen, lbrack, rbrack, lbrace, rbrace :: Document d => d
semi = char ';'
colon = char ':'
comma = char ','
space = char ' '
equals = char '='
lparen = char '('
rparen = char ')'
lbrack = char '['
rbrack = char ']'
lbrace = char '{'
rbrace = char '}'
int :: Document d => Int -> d
int n = text (show n)
integer :: Document d => Integer -> d
integer n = text (show n)
float :: Document d => Float -> d
float n = text (show n)
double :: Document d => Double -> d
double n = text (show n)
rational :: Document d => Rational -> d
rational n = text (show n)
quotes, doubleQuotes, parens, brackets, braces :: Document d => d -> d
quotes p = char '\'' <> p <> char '\''
doubleQuotes p = char '"' <> p <> char '"'
parens p = char '(' <> p <> char ')'
brackets p = char '[' <> p <> char ']'
braces p = char '{' <> p <> char '}'
hang :: Document d => d -> Int -> d -> d
hang d1 n d2 = sep [d1, nest n d2]
punctuate :: Document d => d -> [d] -> [d]
punctuate _ [] = []
punctuate p (d:ds) = go d ds
where
go d' [] = [d']
go d' (e:es) = (d' <> p) : go e es