{-# LANGUAGE FlexibleInstances #-}
module Pretty
( prettyExpression,
prettyExpression',
prettyProgram,
prettyProgram',
prettyAttribute,
prettySubsts,
prettySubsts',
prettySubst,
prettyBinding,
prettyBytes,
prettyExtraArg,
PrintMode (SWEET, SALTY),
Encoding (ASCII, UNICODE),
)
where
import Ast
import Data.List (intercalate)
import qualified Data.Map.Strict as Map
import Matcher
import Misc
import Prettyprinter
import Prettyprinter.Render.String (renderString)
import Yaml (ExtraArgument (..))
data PrintMode = SWEET | SALTY
deriving (PrintMode -> PrintMode -> Bool
(PrintMode -> PrintMode -> Bool)
-> (PrintMode -> PrintMode -> Bool) -> Eq PrintMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PrintMode -> PrintMode -> Bool
== :: PrintMode -> PrintMode -> Bool
$c/= :: PrintMode -> PrintMode -> Bool
/= :: PrintMode -> PrintMode -> Bool
Eq)
instance Show PrintMode where
show :: PrintMode -> String
show PrintMode
SWEET = String
"sweet"
show PrintMode
SALTY = String
"salty"
data Encoding = ASCII | UNICODE
newtype Formatted a = Formatted {forall a. Formatted a -> (PrintMode, Encoding, a)
unFormatted :: (PrintMode, Encoding, a)}
formatted :: a -> Formatted a
formatted :: forall a. a -> Formatted a
formatted a
x = (PrintMode, Encoding, a) -> Formatted a
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SALTY, Encoding
UNICODE, a
x)
prettyMeta :: String -> Doc ann
prettyMeta :: forall ann. String -> Doc ann
prettyMeta String
meta = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"!" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
meta
prettyArrow :: Encoding -> Doc ann
prettyArrow :: forall ann. Encoding -> Doc ann
prettyArrow Encoding
UNICODE = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"↦"
prettyArrow Encoding
ASCII = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"->"
prettyLsb :: Encoding -> Doc ann
prettyLsb :: forall ann. Encoding -> Doc ann
prettyLsb Encoding
UNICODE = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"⟦"
prettyLsb Encoding
ASCII = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"[["
prettyRsb :: Encoding -> Doc ann
prettyRsb :: forall ann. Encoding -> Doc ann
prettyRsb Encoding
UNICODE = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"⟧"
prettyRsb Encoding
ASCII = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"]]"
prettyDashedArrow :: Doc ann
prettyDashedArrow :: forall ann. Doc ann
prettyDashedArrow = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"⤍"
prettyLambda :: Encoding -> Doc ann
prettyLambda :: forall ann. Encoding -> Doc ann
prettyLambda Encoding
UNICODE = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"λ" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
forall ann. Doc ann
prettyDashedArrow
prettyLambda Encoding
ASCII = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"L>"
prettyDelta :: Encoding -> Doc ann
prettyDelta :: forall ann. Encoding -> Doc ann
prettyDelta Encoding
UNICODE = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"Δ" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
forall ann. Doc ann
prettyDashedArrow
prettyDelta Encoding
ASCII = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"D>"
instance Pretty ExtraArgument where
pretty :: forall ann. ExtraArgument -> Doc ann
pretty (ArgExpression Expression
expr) = Formatted Expression -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Expression -> Doc ann
pretty ((PrintMode, Encoding, Expression) -> Formatted Expression
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
UNICODE, Expression
expr))
pretty (ArgBinding Binding
bd) = Formatted Binding -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Binding -> Doc ann
pretty ((PrintMode, Encoding, Binding) -> Formatted Binding
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
UNICODE, Binding
bd))
pretty (ArgAttribute Attribute
attr) = Formatted Attribute -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Attribute -> Doc ann
pretty (Attribute -> Formatted Attribute
forall a. a -> Formatted a
formatted Attribute
attr)
pretty (ArgBytes Bytes
bytes) = Bytes -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Bytes -> Doc ann
pretty Bytes
bytes
instance Pretty Bytes where
pretty :: forall ann. Bytes -> Doc ann
pretty Bytes
BtEmpty = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"--"
pretty (BtOne String
bt) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
bt Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"-"
pretty (BtMany [String]
bts) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty (String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate String
"-" [String]
bts)
pretty (BtMeta String
meta) = String -> Doc ann
forall ann. String -> Doc ann
prettyMeta String
meta
instance Pretty (Formatted Attribute) where
pretty :: forall ann. Formatted Attribute -> Doc ann
pretty (Formatted (PrintMode
_, Encoding
_, AtMeta String
meta)) = String -> Doc ann
forall ann. String -> Doc ann
prettyMeta String
meta
pretty (Formatted (PrintMode
_, Encoding
ASCII, AtAlpha Integer
idx)) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"~" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Integer -> Doc ann
forall ann. Integer -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Integer
idx
pretty (Formatted (PrintMode
_, Encoding
ASCII, Attribute
AtPhi)) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"@"
pretty (Formatted (PrintMode
_, Encoding
ASCII, Attribute
AtRho)) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"^"
pretty (Formatted (PrintMode
_, Encoding
_, Attribute
attr)) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty (Attribute -> String
forall a. Show a => a -> String
show Attribute
attr)
instance Pretty (Formatted Binding) where
pretty :: forall ann. Formatted Binding -> Doc ann
pretty (Formatted (PrintMode
SWEET, Encoding
encoding, BiTau Attribute
attr (ExFormation [Binding]
bindings))) =
let voids' :: [Attribute]
voids' = [Binding] -> [Attribute]
voids [Binding]
bindings
in if [Attribute] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Attribute]
voids'
then Formatted Attribute -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Attribute -> Doc ann
pretty ((PrintMode, Encoding, Attribute) -> Formatted Attribute
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
encoding, Attribute
attr)) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyArrow Encoding
encoding Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Formatted Expression -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Expression -> Doc ann
pretty ((PrintMode, Encoding, Expression) -> Formatted Expression
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
encoding, [Binding] -> Expression
ExFormation [Binding]
bindings))
else
if [Attribute] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Attribute]
voids' Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== [Binding] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Binding]
bindings Bool -> Bool -> Bool
&& [Attribute] -> Attribute
forall a. HasCallStack => [a] -> a
last [Attribute]
voids' Attribute -> Attribute -> Bool
forall a. Eq a => a -> a -> Bool
== Attribute
AtRho
then [Attribute] -> Doc ann
forall ann. [Attribute] -> Doc ann
inlineVoids ([Attribute] -> [Attribute]
forall a. HasCallStack => [a] -> [a]
init [Attribute]
voids') Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyLsb Encoding
encoding Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyRsb Encoding
encoding
else [Attribute] -> Doc ann
forall ann. [Attribute] -> Doc ann
inlineVoids [Attribute]
voids' Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Formatted Expression -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Expression -> Doc ann
pretty ((PrintMode, Encoding, Expression) -> Formatted Expression
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
encoding, [Binding] -> Expression
ExFormation (Int -> [Binding] -> [Binding]
forall a. Int -> [a] -> [a]
drop ([Attribute] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Attribute]
voids') [Binding]
bindings)))
where
voids :: [Binding] -> [Attribute]
voids :: [Binding] -> [Attribute]
voids [] = []
voids (Binding
bd : [Binding]
bds) = case Binding
bd of
BiVoid Attribute
attr -> Attribute
attr Attribute -> [Attribute] -> [Attribute]
forall a. a -> [a] -> [a]
: [Binding] -> [Attribute]
voids [Binding]
bds
Binding
_ -> []
inlineVoids :: [Attribute] -> Doc ann
inlineVoids :: forall ann. [Attribute] -> Doc ann
inlineVoids [] = Formatted Attribute -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Attribute -> Doc ann
pretty ((PrintMode, Encoding, Attribute) -> Formatted Attribute
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
encoding, Attribute
attr)) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyArrow Encoding
encoding
inlineVoids [Attribute]
voids' =
Formatted Attribute -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Attribute -> Doc ann
pretty ((PrintMode, Encoding, Attribute) -> Formatted Attribute
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
encoding, Attribute
attr))
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
forall ann. Doc ann
lparen
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Attribute -> Doc ann) -> [Attribute] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map (\Attribute
attr -> Formatted Attribute -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Attribute -> Doc ann
pretty ((PrintMode, Encoding, Attribute) -> Formatted Attribute
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
encoding, Attribute
attr))) [Attribute]
voids'))
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
forall ann. Doc ann
rparen
Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyArrow Encoding
encoding
pretty (Formatted (PrintMode
mode, Encoding
encoding, BiTau Attribute
attr Expression
expr)) = Formatted Attribute -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Attribute -> Doc ann
pretty ((PrintMode, Encoding, Attribute) -> Formatted Attribute
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
mode, Encoding
encoding, Attribute
attr)) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyArrow Encoding
encoding Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Formatted Expression -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Expression -> Doc ann
pretty ((PrintMode, Encoding, Expression) -> Formatted Expression
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
mode, Encoding
encoding, Expression
expr))
pretty (Formatted (PrintMode
_, Encoding
_, BiMeta String
meta)) = String -> Doc ann
forall ann. String -> Doc ann
prettyMeta String
meta
pretty (Formatted (PrintMode
_, Encoding
encoding, BiDelta Bytes
bytes)) = Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyDelta Encoding
encoding Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Bytes -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Bytes -> Doc ann
pretty Bytes
bytes
pretty (Formatted (PrintMode
_, Encoding
encoding, BiLambda String
func)) = Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyLambda Encoding
encoding Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
func
pretty (Formatted (PrintMode
_, Encoding
encoding, BiMetaLambda String
meta)) = Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyLambda Encoding
encoding Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> String -> Doc ann
forall ann. String -> Doc ann
prettyMeta String
meta
pretty (Formatted (PrintMode
mode, Encoding
UNICODE, BiVoid Attribute
attr)) = Formatted Attribute -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Attribute -> Doc ann
pretty ((PrintMode, Encoding, Attribute) -> Formatted Attribute
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
mode, Encoding
UNICODE, Attribute
attr)) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyArrow Encoding
UNICODE Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"∅"
pretty (Formatted (PrintMode
mode, Encoding
ASCII, BiVoid Attribute
attr)) = Formatted Attribute -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Attribute -> Doc ann
pretty ((PrintMode, Encoding, Attribute) -> Formatted Attribute
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
mode, Encoding
ASCII, Attribute
attr)) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyArrow Encoding
ASCII Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"?"
instance {-# OVERLAPPING #-} Pretty (Formatted [Binding]) where
pretty :: forall ann. Formatted [Binding] -> Doc ann
pretty (Formatted (PrintMode
SWEET, Encoding
encoding, [Binding]
bds)) = [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Binding -> Doc ann) -> [Doc ann] -> [Binding] -> [Doc ann]
forall ann.
(Binding -> Doc ann) -> [Doc ann] -> [Binding] -> [Doc ann]
excludeVoidRho (\Binding
bd -> Formatted Binding -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Binding -> Doc ann
pretty ((PrintMode, Encoding, Binding) -> Formatted Binding
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
encoding, Binding
bd))) [] [Binding]
bds))
where
excludeVoidRho :: (Binding -> Doc ann) -> [Doc ann] -> [Binding] -> [Doc ann]
excludeVoidRho :: forall ann.
(Binding -> Doc ann) -> [Doc ann] -> [Binding] -> [Doc ann]
excludeVoidRho Binding -> Doc ann
func [Doc ann]
acc [Binding
bd] = case Binding
bd of
BiVoid Attribute
AtRho -> [Doc ann] -> [Doc ann]
forall a. [a] -> [a]
reverse [Doc ann]
acc
Binding
_ -> [Doc ann] -> [Doc ann]
forall a. [a] -> [a]
reverse (Binding -> Doc ann
func Binding
bd Doc ann -> [Doc ann] -> [Doc ann]
forall a. a -> [a] -> [a]
: [Doc ann]
acc)
excludeVoidRho Binding -> Doc ann
func [Doc ann]
acc (Binding
x : [Binding]
xs) = (Binding -> Doc ann) -> [Doc ann] -> [Binding] -> [Doc ann]
forall ann.
(Binding -> Doc ann) -> [Doc ann] -> [Binding] -> [Doc ann]
excludeVoidRho Binding -> Doc ann
func (Binding -> Doc ann
func Binding
x Doc ann -> [Doc ann] -> [Doc ann]
forall a. a -> [a] -> [a]
: [Doc ann]
acc) [Binding]
xs
excludeVoidRho Binding -> Doc ann
func [Doc ann]
acc [] = [Doc ann] -> [Doc ann]
forall a. [a] -> [a]
reverse [Doc ann]
acc
pretty (Formatted (PrintMode
SALTY, Encoding
encoding, [Binding]
bds)) = [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Binding -> Doc ann) -> [Binding] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map (\Binding
bd -> Formatted Binding -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Binding -> Doc ann
pretty ((PrintMode, Encoding, Binding) -> Formatted Binding
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SALTY, Encoding
encoding, Binding
bd))) [Binding]
bds))
complexApplication :: Expression -> (Expression, [Binding], [Expression])
complexApplication :: Expression -> (Expression, [Binding], [Expression])
complexApplication (ExApplication (ExApplication Expression
expr Binding
tau) Binding
tau') =
let (Expression
before, [Binding]
taus, [Expression]
exprs) = Expression -> (Expression, [Binding], [Expression])
complexApplication (Expression -> Binding -> Expression
ExApplication Expression
expr Binding
tau)
taus' :: [Binding]
taus' = Binding
tau' Binding -> [Binding] -> [Binding]
forall a. a -> [a] -> [a]
: [Binding]
taus
in if [Expression] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Expression]
exprs
then (Expression
before, [Binding]
taus', [])
else case Binding
tau' of
BiTau (AtAlpha Integer
idx) Expression
expr' ->
if Integer
idx Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Int -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral ([Expression] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Expression]
exprs)
then (Expression
before, [Binding]
taus', Expression
expr' Expression -> [Expression] -> [Expression]
forall a. a -> [a] -> [a]
: [Expression]
exprs)
else (Expression
before, [Binding]
taus', [])
Binding
_ -> (Expression
before, [Binding]
taus', [])
complexApplication (ExApplication Expression
expr (BiTau (AtAlpha Integer
0) Expression
expr')) = (Expression
expr, [Attribute -> Expression -> Binding
BiTau (Integer -> Attribute
AtAlpha Integer
0) Expression
expr'], [Expression
expr'])
complexApplication (ExApplication Expression
expr Binding
tau) = (Expression
expr, [Binding
tau], [])
instance Pretty (Formatted Expression) where
pretty :: forall ann. Formatted Expression -> Doc ann
pretty (Formatted (PrintMode
SWEET, Encoding
UNICODE, ExDispatch (ExDispatch Expression
ExGlobal (AtLabel String
"org")) (AtLabel String
"eolang"))) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"Φ̇"
pretty (Formatted (PrintMode
SWEET, Encoding
ASCII, ExDispatch (ExDispatch Expression
ExGlobal (AtLabel String
"org")) (AtLabel String
"eolang"))) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"QQ"
pretty (Formatted (PrintMode
SWEET, Encoding
_, DataString Bytes
bytes)) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"\"" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty (Bytes -> String
btsToStr Bytes
bytes) Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"\""
pretty (Formatted (PrintMode
SWEET, Encoding
_, DataNumber Bytes
bytes)) = (Integer -> Doc ann)
-> (Double -> Doc ann) -> Either Integer Double -> Doc ann
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either Integer -> Doc ann
forall ann. Integer -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Double -> Doc ann
forall ann. Double -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty (Bytes -> Either Integer Double
btsToNum Bytes
bytes)
pretty (Formatted (PrintMode
SWEET, Encoding
encoding, DataObject String
other Bytes
bytes)) = Formatted Expression -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Expression -> Doc ann
pretty ((PrintMode, Encoding, Expression) -> Formatted Expression
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SALTY, Encoding
encoding, String -> Bytes -> Expression
DataObject String
other Bytes
bytes))
pretty (Formatted (PrintMode
SWEET, Encoding
UNICODE, ExFormation [BiVoid Attribute
AtRho])) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"⟦⟧"
pretty (Formatted (PrintMode
SWEET, Encoding
ASCII, ExFormation [BiVoid Attribute
AtRho])) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"[[]]"
pretty (Formatted (PrintMode
mode, Encoding
encoding, ExFormation [Binding
binding])) = case Binding
binding of
BiTau Attribute
_ Expression
_ -> [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep [Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyLsb Encoding
encoding, Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
indent Int
2 (Formatted Binding -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Binding -> Doc ann
pretty ((PrintMode, Encoding, Binding) -> Formatted Binding
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
mode, Encoding
encoding, Binding
binding))), Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyRsb Encoding
encoding]
Binding
_ -> Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyLsb Encoding
encoding Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Formatted Binding -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Binding -> Doc ann
pretty ((PrintMode, Encoding, Binding) -> Formatted Binding
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
mode, Encoding
encoding, Binding
binding)) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyRsb Encoding
encoding
pretty (Formatted (PrintMode
_, Encoding
UNICODE, ExFormation [])) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"⟦⟧"
pretty (Formatted (PrintMode
_, Encoding
ASCII, ExFormation [])) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"[[]]"
pretty (Formatted (PrintMode
mode, Encoding
encoding, ExFormation [Binding]
bindings)) = [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep [Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyLsb Encoding
encoding, Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
indent Int
2 (Formatted [Binding] -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted [Binding] -> Doc ann
pretty ((PrintMode, Encoding, [Binding]) -> Formatted [Binding]
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
mode, Encoding
encoding, [Binding]
bindings))), Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyRsb Encoding
encoding]
pretty (Formatted (PrintMode
_, Encoding
UNICODE, Expression
ExThis)) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"ξ"
pretty (Formatted (PrintMode
_, Encoding
ASCII, Expression
ExThis)) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"$"
pretty (Formatted (PrintMode
_, Encoding
UNICODE, Expression
ExGlobal)) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"Φ"
pretty (Formatted (PrintMode
_, Encoding
ASCII, Expression
ExGlobal)) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"Q"
pretty (Formatted (PrintMode
_, Encoding
UNICODE, Expression
ExTermination)) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"⊥"
pretty (Formatted (PrintMode
_, Encoding
ASCII, Expression
ExTermination)) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"T"
pretty (Formatted (PrintMode
_, Encoding
_, ExMeta String
meta)) = String -> Doc ann
forall ann. String -> Doc ann
prettyMeta String
meta
pretty (Formatted (PrintMode
SWEET, Encoding
encoding, ExApplication (ExApplication Expression
expr Binding
tau) Binding
tau')) =
let (Expression
expr', [Binding]
taus, [Expression]
exprs) = Expression -> (Expression, [Binding], [Expression])
complexApplication (Expression -> Binding -> Expression
ExApplication (Expression -> Binding -> Expression
ExApplication Expression
expr Binding
tau) Binding
tau')
args :: Doc ann
args =
if [Expression] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Expression]
exprs
then Formatted [Binding] -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted [Binding] -> Doc ann
pretty ((PrintMode, Encoding, [Binding]) -> Formatted [Binding]
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
encoding, [Binding] -> [Binding]
forall a. [a] -> [a]
reverse [Binding]
taus))
else [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Expression -> Doc ann) -> [Expression] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map (\Expression
exp -> Formatted Expression -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Expression -> Doc ann
pretty ((PrintMode, Encoding, Expression) -> Formatted Expression
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
encoding, Expression
exp))) ([Expression] -> [Expression]
forall a. [a] -> [a]
reverse [Expression]
exprs)))
in Formatted Expression -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Expression -> Doc ann
pretty ((PrintMode, Encoding, Expression) -> Formatted Expression
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
encoding, Expression
expr')) Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep [Doc ann
forall ann. Doc ann
lparen, Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
indent Int
2 Doc ann
forall ann. Doc ann
args, Doc ann
forall ann. Doc ann
rparen]
pretty (Formatted (PrintMode
SWEET, Encoding
encoding, ExApplication Expression
expr Binding
tau)) =
let arg :: Doc ann
arg = case Binding
tau of
BiTau (AtAlpha Integer
0) Expression
expr' -> Formatted Expression -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Expression -> Doc ann
pretty ((PrintMode, Encoding, Expression) -> Formatted Expression
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
encoding, Expression
expr'))
Binding
_ -> Formatted Binding -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Binding -> Doc ann
pretty ((PrintMode, Encoding, Binding) -> Formatted Binding
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
encoding, Binding
tau))
in Formatted Expression -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Expression -> Doc ann
pretty ((PrintMode, Encoding, Expression) -> Formatted Expression
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
encoding, Expression
expr)) Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep [Doc ann
forall ann. Doc ann
lparen, Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
indent Int
2 Doc ann
forall ann. Doc ann
arg, Doc ann
forall ann. Doc ann
rparen]
pretty (Formatted (PrintMode
mode, Encoding
encoding, ExApplication Expression
expr Binding
tau)) = Formatted Expression -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Expression -> Doc ann
pretty ((PrintMode, Encoding, Expression) -> Formatted Expression
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
mode, Encoding
encoding, Expression
expr)) Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep [Doc ann
forall ann. Doc ann
lparen, Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
indent Int
2 (Formatted Binding -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Binding -> Doc ann
pretty ((PrintMode, Encoding, Binding) -> Formatted Binding
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
mode, Encoding
encoding, Binding
tau))), Doc ann
forall ann. Doc ann
rparen]
pretty (Formatted (PrintMode
mode, Encoding
encoding, ExDispatch Expression
expr Attribute
attr)) = Formatted Expression -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Expression -> Doc ann
pretty ((PrintMode, Encoding, Expression) -> Formatted Expression
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
mode, Encoding
encoding, Expression
expr)) Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"." Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Formatted Attribute -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Attribute -> Doc ann
pretty ((PrintMode, Encoding, Attribute) -> Formatted Attribute
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
mode, Encoding
encoding, Attribute
attr))
pretty (Formatted (PrintMode
mode, Encoding
encoding, ExMetaTail Expression
expr String
meta)) = Formatted Expression -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Expression -> Doc ann
pretty ((PrintMode, Encoding, Expression) -> Formatted Expression
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
mode, Encoding
encoding, Expression
expr)) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"*" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> String -> Doc ann
forall ann. String -> Doc ann
prettyMeta String
meta
instance Pretty (Formatted Program) where
pretty :: forall ann. Formatted Program -> Doc ann
pretty (Formatted (PrintMode
SALTY, Encoding
encoding, Program Expression
expr)) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"Φ" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Encoding -> Doc ann
forall ann. Encoding -> Doc ann
prettyArrow Encoding
encoding Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Formatted Expression -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Expression -> Doc ann
pretty ((PrintMode, Encoding, Expression) -> Formatted Expression
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SALTY, Encoding
encoding, Expression
expr))
pretty (Formatted (PrintMode
SWEET, Encoding
encoding, Program Expression
expr)) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"{" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Formatted Expression -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Expression -> Doc ann
pretty ((PrintMode, Encoding, Expression) -> Formatted Expression
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
encoding, Expression
expr)) Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"}"
instance Pretty Tail where
pretty :: forall ann. Tail -> Doc ann
pretty (TaApplication Binding
tau) = [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep [Doc ann
forall ann. Doc ann
lparen, Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
indent Int
2 (Formatted Binding -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Binding -> Doc ann
pretty (Binding -> Formatted Binding
forall a. a -> Formatted a
formatted Binding
tau)), Doc ann
forall ann. Doc ann
rparen]
pretty (TaDispatch Attribute
attr) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"." Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Formatted Attribute -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Attribute -> Doc ann
pretty (Attribute -> Formatted Attribute
forall a. a -> Formatted a
formatted Attribute
attr)
instance Pretty MetaValue where
pretty :: forall ann. MetaValue -> Doc ann
pretty (MvAttribute Attribute
attr) = Formatted Attribute -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Attribute -> Doc ann
pretty (Attribute -> Formatted Attribute
forall a. a -> Formatted a
formatted Attribute
attr)
pretty (MvBytes Bytes
bytes) = Bytes -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Bytes -> Doc ann
pretty Bytes
bytes
pretty (MvBindings []) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"[]"
pretty (MvBindings [Binding]
bindings) = [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep [String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"[", Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
indent Int
2 (Formatted [Binding] -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted [Binding] -> Doc ann
pretty ([Binding] -> Formatted [Binding]
forall a. a -> Formatted a
formatted [Binding]
bindings)), String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"]"]
pretty (MvFunction String
func) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
func
pretty (MvExpression Expression
expr Expression
_) = Formatted Expression -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Formatted Expression -> Doc ann
pretty (Expression -> Formatted Expression
forall a. a -> Formatted a
formatted Expression
expr)
pretty (MvTail [Tail]
tails) = [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Tail -> Doc ann) -> [Tail] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Tail -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Tail -> Doc ann
pretty [Tail]
tails))
instance Pretty Subst where
pretty :: forall ann. Subst -> Doc ann
pretty (Subst Map String MetaValue
mp) =
[Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep
[ Doc ann
forall ann. Doc ann
lparen,
Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
indent
Int
2
( [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep
( Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate
Doc ann
forall ann. Doc ann
comma
( ((String, MetaValue) -> Doc ann)
-> [(String, MetaValue)] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map
(\(String
key, MetaValue
value) -> String -> Doc ann
forall ann. String -> Doc ann
prettyMeta String
key Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
">>" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> MetaValue -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. MetaValue -> Doc ann
pretty MetaValue
value)
(Map String MetaValue -> [(String, MetaValue)]
forall k a. Map k a -> [(k, a)]
Map.toList Map String MetaValue
mp)
)
)
),
Doc ann
forall ann. Doc ann
rparen
]
instance {-# OVERLAPPING #-} Pretty (Formatted [Subst]) where
pretty :: forall ann. Formatted [Subst] -> Doc ann
pretty (Formatted (PrintMode
_, Encoding
_, [])) = String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"[]"
pretty (Formatted (PrintMode
mode, Encoding
_, [Subst]
substs)) = [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep [String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"[", Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
indent Int
2 ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
vsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Subst -> Doc ann) -> [Subst] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Subst -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Subst -> Doc ann
pretty [Subst]
substs))), String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
"]"]
render :: (Pretty a) => a -> String
render :: forall a. Pretty a => a -> String
render a
printable = SimpleDocStream Any -> String
forall ann. SimpleDocStream ann -> String
renderString (LayoutOptions -> Doc Any -> SimpleDocStream Any
forall ann. LayoutOptions -> Doc ann -> SimpleDocStream ann
layoutPretty LayoutOptions
defaultLayoutOptions (a -> Doc Any
forall ann. a -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty a
printable))
prettyBinding :: Binding -> String
prettyBinding :: Binding -> String
prettyBinding Binding
binding = Formatted Binding -> String
forall a. Pretty a => a -> String
render (Binding -> Formatted Binding
forall a. a -> Formatted a
formatted Binding
binding)
prettyExtraArg :: ExtraArgument -> String
= ExtraArgument -> String
forall a. Pretty a => a -> String
render
prettyBytes :: Bytes -> String
prettyBytes :: Bytes -> String
prettyBytes = Bytes -> String
forall a. Pretty a => a -> String
render
prettyAttribute :: Attribute -> String
prettyAttribute :: Attribute -> String
prettyAttribute Attribute
attr = Formatted Attribute -> String
forall a. Pretty a => a -> String
render (Attribute -> Formatted Attribute
forall a. a -> Formatted a
formatted Attribute
attr)
prettySubst :: Subst -> String
prettySubst :: Subst -> String
prettySubst = Subst -> String
forall a. Pretty a => a -> String
render
prettySubsts :: [Subst] -> String
prettySubsts :: [Subst] -> String
prettySubsts = [Subst] -> String
forall a. Pretty a => a -> String
render
prettySubsts' :: [Subst] -> PrintMode -> Encoding -> String
prettySubsts' :: [Subst] -> PrintMode -> Encoding -> String
prettySubsts' [Subst]
substs PrintMode
mode Encoding
encoding = Formatted [Subst] -> String
forall a. Pretty a => a -> String
render ((PrintMode, Encoding, [Subst]) -> Formatted [Subst]
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
mode, Encoding
encoding, [Subst]
substs))
prettyExpression :: Expression -> String
prettyExpression :: Expression -> String
prettyExpression Expression
expr = Formatted Expression -> String
forall a. Pretty a => a -> String
render (Expression -> Formatted Expression
forall a. a -> Formatted a
formatted Expression
expr)
prettyExpression' :: Expression -> String
prettyExpression' :: Expression -> String
prettyExpression' Expression
expr = Formatted Expression -> String
forall a. Pretty a => a -> String
render ((PrintMode, Encoding, Expression) -> Formatted Expression
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
SWEET, Encoding
UNICODE, Expression
expr))
prettyProgram :: Program -> String
prettyProgram :: Program -> String
prettyProgram Program
prog = Formatted Program -> String
forall a. Pretty a => a -> String
render (Program -> Formatted Program
forall a. a -> Formatted a
formatted Program
prog)
prettyProgram' :: Program -> PrintMode -> Encoding -> String
prettyProgram' :: Program -> PrintMode -> Encoding -> String
prettyProgram' Program
prog PrintMode
mode Encoding
encoding = Formatted Program -> String
forall a. Pretty a => a -> String
render ((PrintMode, Encoding, Program) -> Formatted Program
forall a. (PrintMode, Encoding, a) -> Formatted a
Formatted (PrintMode
mode, Encoding
encoding, Program
prog))