{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Render where
import Bytes (nonFiniteName)
import CST
import Data.Text (Text)
import qualified Data.Text as T
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Builder as TLB
class Render a where
render :: a -> Text
instance Render String where
render :: String -> Text
render = String -> Text
T.pack
instance Render Text where
render :: Text -> Text
render = Text -> Text
forall a. a -> a
id
instance Render Int where
render :: Int -> Text
render = String -> Text
T.pack (String -> Text) -> (Int -> String) -> Int -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String
forall a. Show a => a -> String
show
instance Render Char where
render :: Char -> Text
render = Char -> Text
T.singleton
instance Render LCB where
render :: LCB -> Text
render LCB
LCB = Text
"{"
render LCB
BIG_LCB = Text
"\\Big\\{"
instance Render RCB where
render :: RCB -> Text
render RCB
RCB = Text
"}"
render RCB
BIG_RCB = Text
"\\Big\\}"
instance Render LSB where
render :: LSB -> Text
render LSB
LSB = Text
"⟦"
render LSB
LSB' = Text
"[["
instance Render RSB where
render :: RSB -> Text
render RSB
RSB = Text
"⟧"
render RSB
RSB' = Text
"]]"
instance Render COMMA where
render :: COMMA -> Text
render COMMA
COMMA = Text
","
render COMMA
NO_COMMA = Text
""
instance Render ARROW where
render :: ARROW -> Text
render ARROW
ARROW = Text
"↦"
render ARROW
ARROW' = Text
"->"
instance Render DASHED_ARROW where
render :: DASHED_ARROW -> Text
render DASHED_ARROW
DASHED_ARROW = Text
"⤍"
instance Render VOID where
render :: VOID -> Text
render VOID
EMPTY = Text
"∅"
render VOID
QUESTION = Text
"?"
instance Render PHI where
render :: PHI -> Text
render PHI
PHI = Text
"φ"
render PHI
AT = Text
"@"
instance Render RHO where
render :: RHO -> Text
render RHO
RHO = Text
"ρ"
render RHO
CARET = Text
"^"
render RHO
RHO' = Text
"\\phiTerminal{\\rho}"
instance Render DELTA where
render :: DELTA -> Text
render DELTA
DELTA = Text
"Δ"
render DELTA
DELTA' = Text
"D"
instance Render XI where
render :: XI -> Text
render XI
XI = Text
"ξ"
render XI
DOLLAR = Text
"$"
render XI
XI' = Text
"\\phiTerminal{\\xi}"
instance Render LAMBDA where
render :: LAMBDA -> Text
render LAMBDA
LAMBDA = Text
"λ"
render LAMBDA
LAMBDA' = Text
"L"
instance Render GLOBAL where
render :: GLOBAL -> Text
render GLOBAL
Φ = Text
"Φ"
render GLOBAL
Q = Text
"Q"
instance Render TERMINATION where
render :: TERMINATION -> Text
render TERMINATION
DEAD = Text
"⊥"
render TERMINATION
T = Text
"T"
instance Render SPACE where
render :: SPACE -> Text
render SPACE
SPACE = Text
" "
render SPACE
NO_SPACE = Text
""
instance Render EOL where
render :: EOL -> Text
render EOL
EOL = Text
"\n"
render EOL
NO_EOL = Text
""
instance Render DOTS where
render :: DOTS -> Text
render DOTS
DOTS = Text
"..."
render DOTS
DOTS' = Text
"\\dots"
instance Render BYTES where
render :: BYTES -> Text
render BYTES
BT_EMPTY = Text
"--"
render (BT_ONE String
bte) = String -> Text
forall a. Render a => a -> Text
render String
bte Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"-"
render (BT_MANY [String]
bts) = Text -> [Text] -> Text
T.intercalate Text
"-" ((String -> Text) -> [String] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map String -> Text
forall a. Render a => a -> Text
render [String]
bts)
render (BT_META META
mt) = META -> Text
forall a. Render a => a -> Text
render META
mt
render (BT_PIPED BYTES
bts) = Text
"|" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> BYTES -> Text
forall a. Render a => a -> Text
render BYTES
bts Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"|"
render (BT_CUT [String]
opening Int
omitted [String]
closing) = Text -> [Text] -> Text
T.intercalate Text
"-" ((String -> Text) -> [String] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map String -> Text
forall a. Render a => a -> Text
render [String]
opening) Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"-..(" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Int -> Text
forall a. Render a => a -> Text
render Int
omitted Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"b)..-" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> [Text] -> Text
T.intercalate Text
"-" ((String -> Text) -> [String] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map String -> Text
forall a. Render a => a -> Text
render [String]
closing)
instance Render EXCLAMATION where
render :: EXCLAMATION -> Text
render EXCLAMATION
EXCL = Text
"!"
render EXCLAMATION
NO_EXCL = Text
""
instance Render META_HEAD where
render :: META_HEAD -> Text
render META_HEAD
E = Text
"𝑒"
render META_HEAD
E' = Text
"e"
render META_HEAD
N = Text
"𝑛"
render META_HEAD
N' = Text
"n"
render META_HEAD
K = Text
"𝑘"
render META_HEAD
K' = Text
"k"
render META_HEAD
A = Text
"t"
render META_HEAD
TAU = Text
"𝜏"
render META_HEAD
TAU' = Text
"\\tau"
render META_HEAD
I = Text
"𝑖"
render META_HEAD
I' = Text
"i"
render META_HEAD
B = Text
"𝐵"
render META_HEAD
B' = Text
"B"
render META_HEAD
D = Text
"𝛿"
render META_HEAD
D' = Text
"\\delta"
render META_HEAD
D'' = Text
"d"
render META_HEAD
F = Text
"𝑓"
render META_HEAD
F' = Text
"F"
render META_HEAD
F'' = Text
"f"
render META_HEAD
S = Text
"𝜎"
render META_HEAD
S' = Text
"S"
render META_HEAD
S'' = Text
"\\sigma"
instance Render META where
render :: META -> Text
render META{Text
EXCLAMATION
META_HEAD
excl :: EXCLAMATION
hd :: META_HEAD
rest :: Text
$sel:excl:META :: META -> EXCLAMATION
$sel:hd:META :: META -> META_HEAD
$sel:rest:META :: META -> Text
..} = EXCLAMATION -> Text
forall a. Render a => a -> Text
render EXCLAMATION
excl Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> META_HEAD -> Text
forall a. Render a => a -> Text
render META_HEAD
hd Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> Text
forall a. Render a => a -> Text
render Text
rest
instance Render ALPHA' where
render :: ALPHA' -> Text
render ALPHA'
ALPHA = Text
"α"
render ALPHA'
ALPHA' = Text
"~"
instance Render ALPHA where
render :: ALPHA -> Text
render AL_IDX{Int
ALPHA'
sym :: ALPHA'
idx :: Int
$sel:sym:AL_IDX :: ALPHA -> ALPHA'
$sel:idx:AL_IDX :: ALPHA -> Int
..} = ALPHA' -> Text
forall a. Render a => a -> Text
render ALPHA'
sym Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Int -> Text
forall a. Render a => a -> Text
render Int
idx
render AL_META{ALPHA'
META
$sel:sym:AL_IDX :: ALPHA -> ALPHA'
sym :: ALPHA'
meta :: META
$sel:meta:AL_IDX :: ALPHA -> META
..} = ALPHA' -> Text
forall a. Render a => a -> Text
render ALPHA'
sym Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> META -> Text
forall a. Render a => a -> Text
render META
meta
instance Render TAB where
render :: TAB -> Text
render TAB{Int
indent :: Int
$sel:indent:TAB :: TAB -> Int
..} = Int -> Text -> Text
T.replicate Int
indent Text
" "
render TAB
TAB' = Text
" "
render TAB
NO_TAB = Text
""
instance Render PAIR where
render :: PAIR -> Text
render PA_TAU{ATTRIBUTE
EXPRESSION
ARROW
attr :: ATTRIBUTE
arrow :: ARROW
expr :: EXPRESSION
$sel:attr:PA_TAU :: PAIR -> ATTRIBUTE
$sel:arrow:PA_TAU :: PAIR -> ARROW
$sel:expr:PA_TAU :: PAIR -> EXPRESSION
..} = ATTRIBUTE -> Text
forall a. Render a => a -> Text
render ATTRIBUTE
attr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
SPACE Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ARROW -> Text
forall a. Render a => a -> Text
render ARROW
arrow Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
SPACE Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr
render PA_ALPHA{EXPRESSION
ALPHA
ARROW
$sel:arrow:PA_TAU :: PAIR -> ARROW
$sel:expr:PA_TAU :: PAIR -> EXPRESSION
alpha :: ALPHA
arrow :: ARROW
expr :: EXPRESSION
$sel:alpha:PA_TAU :: PAIR -> ALPHA
..} = ALPHA -> Text
forall a. Render a => a -> Text
render ALPHA
alpha Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
SPACE Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ARROW -> Text
forall a. Render a => a -> Text
render ARROW
arrow Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
SPACE Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr
render PA_FORMATION{$sel:voids:PA_TAU :: PAIR -> [ATTRIBUTE]
voids = [], ATTRIBUTE
$sel:attr:PA_TAU :: PAIR -> ATTRIBUTE
attr :: ATTRIBUTE
attr, ARROW
$sel:arrow:PA_TAU :: PAIR -> ARROW
arrow :: ARROW
arrow, EXPRESSION
$sel:expr:PA_TAU :: PAIR -> EXPRESSION
expr :: EXPRESSION
expr} = PAIR -> Text
forall a. Render a => a -> Text
render (ATTRIBUTE -> ARROW -> EXPRESSION -> PAIR
PA_TAU ATTRIBUTE
attr ARROW
arrow EXPRESSION
expr)
render PA_FORMATION{[ATTRIBUTE]
ATTRIBUTE
EXPRESSION
ARROW
$sel:attr:PA_TAU :: PAIR -> ATTRIBUTE
$sel:arrow:PA_TAU :: PAIR -> ARROW
$sel:expr:PA_TAU :: PAIR -> EXPRESSION
$sel:voids:PA_TAU :: PAIR -> [ATTRIBUTE]
attr :: ATTRIBUTE
voids :: [ATTRIBUTE]
arrow :: ARROW
expr :: EXPRESSION
..} = ATTRIBUTE -> Text
forall a. Render a => a -> Text
render ATTRIBUTE
attr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"(" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> [ATTRIBUTE] -> Text
forall a. Render a => a -> Text
render [ATTRIBUTE]
voids Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
")" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
SPACE Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ARROW -> Text
forall a. Render a => a -> Text
render ARROW
arrow Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
SPACE Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr
render PA_LAMBDA{Text
func :: Text
$sel:func:PA_TAU :: PAIR -> Text
..} = LAMBDA -> Text
forall a. Render a => a -> Text
render LAMBDA
LAMBDA Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
SPACE Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> DASHED_ARROW -> Text
forall a. Render a => a -> Text
render DASHED_ARROW
DASHED_ARROW Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
SPACE Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> Text
forall a. Render a => a -> Text
render Text
func
render PA_LAMBDA'{Text
$sel:func:PA_TAU :: PAIR -> Text
func :: Text
..} = Text
"L> " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> Text
forall a. Render a => a -> Text
render Text
func
render PA_VOID{ATTRIBUTE
VOID
ARROW
$sel:attr:PA_TAU :: PAIR -> ATTRIBUTE
$sel:arrow:PA_TAU :: PAIR -> ARROW
attr :: ATTRIBUTE
arrow :: ARROW
void :: VOID
$sel:void:PA_TAU :: PAIR -> VOID
..} = ATTRIBUTE -> Text
forall a. Render a => a -> Text
render ATTRIBUTE
attr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
SPACE Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ARROW -> Text
forall a. Render a => a -> Text
render ARROW
arrow Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
SPACE Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> VOID -> Text
forall a. Render a => a -> Text
render VOID
void
render PA_DELTA{BYTES
bytes :: BYTES
$sel:bytes:PA_TAU :: PAIR -> BYTES
..} = DELTA -> Text
forall a. Render a => a -> Text
render DELTA
DELTA Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
SPACE Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> DASHED_ARROW -> Text
forall a. Render a => a -> Text
render DASHED_ARROW
DASHED_ARROW Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
SPACE Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> BYTES -> Text
forall a. Render a => a -> Text
render BYTES
bytes
render PA_DELTA'{BYTES
$sel:bytes:PA_TAU :: PAIR -> BYTES
bytes :: BYTES
..} = Text
"D> " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> BYTES -> Text
forall a. Render a => a -> Text
render BYTES
bytes
render PA_META_LAMBDA{META
meta :: META
$sel:meta:PA_TAU :: PAIR -> META
..} = LAMBDA -> Text
forall a. Render a => a -> Text
render LAMBDA
LAMBDA Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
SPACE Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> DASHED_ARROW -> Text
forall a. Render a => a -> Text
render DASHED_ARROW
DASHED_ARROW Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
SPACE Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> META -> Text
forall a. Render a => a -> Text
render META
meta
render PA_META_LAMBDA'{META
$sel:meta:PA_TAU :: PAIR -> META
meta :: META
..} = Text
"L> " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> META -> Text
forall a. Render a => a -> Text
render META
meta
render PA_META_DELTA{META
$sel:meta:PA_TAU :: PAIR -> META
meta :: META
..} = DELTA -> Text
forall a. Render a => a -> Text
render DELTA
DELTA Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
SPACE Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> DASHED_ARROW -> Text
forall a. Render a => a -> Text
render DASHED_ARROW
DASHED_ARROW Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
SPACE Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> META -> Text
forall a. Render a => a -> Text
render META
meta
render PA_META_DELTA'{META
$sel:meta:PA_TAU :: PAIR -> META
meta :: META
..} = Text
"D> " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> META -> Text
forall a. Render a => a -> Text
render META
meta
render PA_FOLDED{Int
count :: Int
$sel:count:PA_TAU :: PAIR -> Int
..} = Text
"+" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Int -> Text
forall a. Render a => a -> Text
render Int
count
instance Render BINDINGS where
render :: BINDINGS -> Text
render = Text -> Text
TL.toStrict (Text -> Text) -> (BINDINGS -> Text) -> BINDINGS -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Text
TLB.toLazyText (Builder -> Text) -> (BINDINGS -> Builder) -> BINDINGS -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BINDINGS -> Builder
binds
where
binds :: BINDINGS -> TLB.Builder
binds :: BINDINGS -> Builder
binds BDS_EMPTY{} = Builder
forall a. Monoid a => a
mempty
binds BDS_PAIR{BINDINGS
PAIR
TAB
EOL
eol :: EOL
tab :: TAB
pair :: PAIR
bindings :: BINDINGS
$sel:eol:BDS_PAIR :: BINDINGS -> EOL
$sel:tab:BDS_PAIR :: BINDINGS -> TAB
$sel:pair:BDS_PAIR :: BINDINGS -> PAIR
$sel:bindings:BDS_PAIR :: BINDINGS -> BINDINGS
..} = Text -> Builder
TLB.fromText (COMMA -> Text
forall a. Render a => a -> Text
render COMMA
COMMA Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EOL -> Text
forall a. Render a => a -> Text
render EOL
eol Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> TAB -> Text
forall a. Render a => a -> Text
render TAB
tab Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> PAIR -> Text
forall a. Render a => a -> Text
render PAIR
pair) Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> BINDINGS -> Builder
binds BINDINGS
bindings
binds BDS_META{BINDINGS
TAB
META
EOL
$sel:eol:BDS_PAIR :: BINDINGS -> EOL
$sel:tab:BDS_PAIR :: BINDINGS -> TAB
$sel:bindings:BDS_PAIR :: BINDINGS -> BINDINGS
eol :: EOL
tab :: TAB
meta :: META
bindings :: BINDINGS
$sel:meta:BDS_PAIR :: BINDINGS -> META
..} = Text -> Builder
TLB.fromText (COMMA -> Text
forall a. Render a => a -> Text
render COMMA
COMMA Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EOL -> Text
forall a. Render a => a -> Text
render EOL
eol Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> TAB -> Text
forall a. Render a => a -> Text
render TAB
tab Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> META -> Text
forall a. Render a => a -> Text
render META
meta) Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> BINDINGS -> Builder
binds BINDINGS
bindings
instance Render APP_BINDING where
render :: APP_BINDING -> Text
render APP_BINDING{PAIR
pair :: PAIR
$sel:pair:APP_BINDING :: APP_BINDING -> PAIR
..} = PAIR -> Text
forall a. Render a => a -> Text
render PAIR
pair
instance Render BINDING where
render :: BINDING -> Text
render BI_EMPTY{} = Text
""
render BI_PAIR{BINDINGS
PAIR
TAB
pair :: PAIR
bindings :: BINDINGS
tab :: TAB
$sel:pair:BI_PAIR :: BINDING -> PAIR
$sel:bindings:BI_PAIR :: BINDING -> BINDINGS
$sel:tab:BI_PAIR :: BINDING -> TAB
..} = PAIR -> Text
forall a. Render a => a -> Text
render PAIR
pair Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> BINDINGS -> Text
forall a. Render a => a -> Text
render BINDINGS
bindings
render BI_META{BINDINGS
TAB
META
$sel:bindings:BI_PAIR :: BINDING -> BINDINGS
$sel:tab:BI_PAIR :: BINDING -> TAB
meta :: META
bindings :: BINDINGS
tab :: TAB
$sel:meta:BI_PAIR :: BINDING -> META
..} = META -> Text
forall a. Render a => a -> Text
render META
meta Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> BINDINGS -> Text
forall a. Render a => a -> Text
render BINDINGS
bindings
instance Render APP_ARGUMENT where
render :: APP_ARGUMENT -> Text
render (AA_TAU APP_BINDING
tau) = APP_BINDING -> Text
forall a. Render a => a -> Text
render APP_BINDING
tau
render (AA_TAUS BINDING
taus) = BINDING -> Text
forall a. Render a => a -> Text
render BINDING
taus
render (AA_EXPRS APP_ARG
args) = APP_ARG -> Text
forall a. Render a => a -> Text
render APP_ARG
args
instance Render APP_ARG where
render :: APP_ARG -> Text
render APP_ARG{EXPRESSION
APP_ARGS
expr :: EXPRESSION
args :: APP_ARGS
$sel:expr:APP_ARG :: APP_ARG -> EXPRESSION
$sel:args:APP_ARG :: APP_ARG -> APP_ARGS
..} = EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> APP_ARGS -> Text
forall a. Render a => a -> Text
render APP_ARGS
args
instance Render APP_ARGS where
render :: APP_ARGS -> Text
render = Text -> Text
TL.toStrict (Text -> Text) -> (APP_ARGS -> Text) -> APP_ARGS -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> Text
TLB.toLazyText (Builder -> Text) -> (APP_ARGS -> Builder) -> APP_ARGS -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. APP_ARGS -> Builder
arguments
where
arguments :: APP_ARGS -> TLB.Builder
arguments :: APP_ARGS -> Builder
arguments APP_ARGS
AAS_EMPTY = Builder
forall a. Monoid a => a
mempty
arguments AAS_EXPR{EXPRESSION
APP_ARGS
TAB
EOL
eol :: EOL
tab :: TAB
expr :: EXPRESSION
args :: APP_ARGS
$sel:eol:AAS_EXPR :: APP_ARGS -> EOL
$sel:tab:AAS_EXPR :: APP_ARGS -> TAB
$sel:expr:AAS_EXPR :: APP_ARGS -> EXPRESSION
$sel:args:AAS_EXPR :: APP_ARGS -> APP_ARGS
..} = Text -> Builder
TLB.fromText (COMMA -> Text
forall a. Render a => a -> Text
render COMMA
COMMA Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EOL -> Text
forall a. Render a => a -> Text
render EOL
eol Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> TAB -> Text
forall a. Render a => a -> Text
render TAB
tab Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr) Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> APP_ARGS -> Builder
arguments APP_ARGS
args
instance Render EXPRESSION where
render :: EXPRESSION -> Text
render EX_GLOBAL{GLOBAL
global :: GLOBAL
$sel:global:EX_GLOBAL :: EXPRESSION -> GLOBAL
..} = GLOBAL -> Text
forall a. Render a => a -> Text
render GLOBAL
global
render EX_XI{XI
xi :: XI
$sel:xi:EX_GLOBAL :: EXPRESSION -> XI
..} = XI -> Text
forall a. Render a => a -> Text
render XI
xi
render EX_ATTR{ATTRIBUTE
attr :: ATTRIBUTE
$sel:attr:EX_GLOBAL :: EXPRESSION -> ATTRIBUTE
..} = ATTRIBUTE -> Text
forall a. Render a => a -> Text
render ATTRIBUTE
attr
render EX_TERMINATION{TERMINATION
termination :: TERMINATION
$sel:termination:EX_GLOBAL :: EXPRESSION -> TERMINATION
..} = TERMINATION -> Text
forall a. Render a => a -> Text
render TERMINATION
termination
render EX_FORMATION{BINDING
TAB
EOL
RSB
LSB
lsb :: LSB
eol :: EOL
tab :: TAB
binding :: BINDING
eol' :: EOL
tab' :: TAB
rsb :: RSB
$sel:lsb:EX_GLOBAL :: EXPRESSION -> LSB
$sel:eol:EX_GLOBAL :: EXPRESSION -> EOL
$sel:tab:EX_GLOBAL :: EXPRESSION -> TAB
$sel:binding:EX_GLOBAL :: EXPRESSION -> BINDING
$sel:eol':EX_GLOBAL :: EXPRESSION -> EOL
$sel:tab':EX_GLOBAL :: EXPRESSION -> TAB
$sel:rsb:EX_GLOBAL :: EXPRESSION -> RSB
..} = LSB -> Text
forall a. Render a => a -> Text
render LSB
lsb Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EOL -> Text
forall a. Render a => a -> Text
render EOL
eol Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> TAB -> Text
forall a. Render a => a -> Text
render TAB
tab Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> BINDING -> Text
forall a. Render a => a -> Text
render BINDING
binding Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EOL -> Text
forall a. Render a => a -> Text
render EOL
eol' Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> TAB -> Text
forall a. Render a => a -> Text
render TAB
tab' Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> RSB -> Text
forall a. Render a => a -> Text
render RSB
rsb
render EX_DISPATCH{ATTRIBUTE
EXPRESSION
SPACE
$sel:attr:EX_GLOBAL :: EXPRESSION -> ATTRIBUTE
expr :: EXPRESSION
space :: SPACE
attr :: ATTRIBUTE
$sel:expr:EX_GLOBAL :: EXPRESSION -> EXPRESSION
$sel:space:EX_GLOBAL :: EXPRESSION -> SPACE
..} = EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
space Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"." Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
space Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ATTRIBUTE -> Text
forall a. Render a => a -> Text
render ATTRIBUTE
attr
render EX_APPLICATION{Int
EXPRESSION
APP_ARGUMENT
TAB
EOL
SPACE
$sel:eol:EX_GLOBAL :: EXPRESSION -> EOL
$sel:tab:EX_GLOBAL :: EXPRESSION -> TAB
$sel:eol':EX_GLOBAL :: EXPRESSION -> EOL
$sel:tab':EX_GLOBAL :: EXPRESSION -> TAB
$sel:expr:EX_GLOBAL :: EXPRESSION -> EXPRESSION
$sel:space:EX_GLOBAL :: EXPRESSION -> SPACE
expr :: EXPRESSION
space :: SPACE
eol :: EOL
tab :: TAB
argument :: APP_ARGUMENT
eol' :: EOL
tab' :: TAB
indent :: Int
$sel:argument:EX_GLOBAL :: EXPRESSION -> APP_ARGUMENT
$sel:indent:EX_GLOBAL :: EXPRESSION -> Int
..} = EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
space Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"(" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EOL -> Text
forall a. Render a => a -> Text
render EOL
eol Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> TAB -> Text
forall a. Render a => a -> Text
render TAB
tab Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> APP_ARGUMENT -> Text
forall a. Render a => a -> Text
render APP_ARGUMENT
argument Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EOL -> Text
forall a. Render a => a -> Text
render EOL
eol' Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> TAB -> Text
forall a. Render a => a -> Text
render TAB
tab' Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
")"
render EX_STRING{String
[Argument]
TAB
$sel:tab:EX_GLOBAL :: EXPRESSION -> TAB
str :: String
tab :: TAB
rhos :: [Argument]
$sel:str:EX_GLOBAL :: EXPRESSION -> String
$sel:rhos:EX_GLOBAL :: EXPRESSION -> [Argument]
..} = Text
"\"" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
forall a. Render a => a -> Text
render String
str Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"\""
render EX_NUMBER{Double
[Argument]
TAB
$sel:tab:EX_GLOBAL :: EXPRESSION -> TAB
$sel:rhos:EX_GLOBAL :: EXPRESSION -> [Argument]
num :: Double
tab :: TAB
rhos :: [Argument]
$sel:num:EX_GLOBAL :: EXPRESSION -> Double
..} = case Double -> (Int, Double)
forall b. Integral b => Double -> (b, Double)
forall a b. (RealFrac a, Integral b) => a -> (b, a)
properFraction Double
num :: (Int, Double) of
(Int
whole, Double
0.0) | Double -> Double
forall a. Num a => a -> a
abs Double
num Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
< Double
1.0e7 Bool -> Bool -> Bool
&& Bool -> Bool
not (Double -> Bool
forall a. RealFloat a => a -> Bool
isNegativeZero Double
num) -> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
whole) Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
".0"
(Int, Double)
_ -> String -> Text
T.pack (Double -> String
forall a. Show a => a -> String
show Double
num)
render EX_NONFINITE{[Argument]
NonFinite
TAB
GLOBAL
$sel:global:EX_GLOBAL :: EXPRESSION -> GLOBAL
$sel:tab:EX_GLOBAL :: EXPRESSION -> TAB
$sel:rhos:EX_GLOBAL :: EXPRESSION -> [Argument]
global :: GLOBAL
nonfinite :: NonFinite
tab :: TAB
rhos :: [Argument]
$sel:nonfinite:EX_GLOBAL :: EXPRESSION -> NonFinite
..} = GLOBAL -> Text
forall a. Render a => a -> Text
render GLOBAL
global Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"." Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> NonFinite -> Text
nonFiniteName NonFinite
nonfinite
render EX_META{META
meta :: META
$sel:meta:EX_GLOBAL :: EXPRESSION -> META
..} = META -> Text
forall a. Render a => a -> Text
render META
meta
render EX_PHI_MEET{Int
Maybe String
EXPRESSION
$sel:expr:EX_GLOBAL :: EXPRESSION -> EXPRESSION
prefix :: Maybe String
idx :: Int
expr :: EXPRESSION
$sel:prefix:EX_GLOBAL :: EXPRESSION -> Maybe String
$sel:idx:EX_GLOBAL :: EXPRESSION -> Int
..} = Text
"\\phinoMeet{" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> (String -> Text) -> Maybe String -> Text
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Text
"" (\String
p -> String -> Text
T.pack String
p Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
":") Maybe String
prefix Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Int -> Text
forall a. Render a => a -> Text
render Int
idx Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"}{ " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" }"
render EX_PHI_AGAIN{Int
Maybe String
EXPRESSION
$sel:expr:EX_GLOBAL :: EXPRESSION -> EXPRESSION
$sel:prefix:EX_GLOBAL :: EXPRESSION -> Maybe String
$sel:idx:EX_GLOBAL :: EXPRESSION -> Int
prefix :: Maybe String
idx :: Int
expr :: EXPRESSION
..} = Text
"\\phinoAgain{" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> (String -> Text) -> Maybe String -> Text
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Text
"" (\String
p -> String -> Text
T.pack String
p Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
":") Maybe String
prefix Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Int -> Text
forall a. Render a => a -> Text
render Int
idx Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"}"
render EX_BYTES{BYTES
bytes :: BYTES
$sel:bytes:EX_GLOBAL :: EXPRESSION -> BYTES
..} = BYTES -> Text
forall a. Render a => a -> Text
render BYTES
bytes
render EX_SINGLE{EXPRESSION
PAIR
SPACE
$sel:space:EX_GLOBAL :: EXPRESSION -> SPACE
pair :: PAIR
space :: SPACE
formation :: EXPRESSION
$sel:pair:EX_GLOBAL :: EXPRESSION -> PAIR
$sel:formation:EX_GLOBAL :: EXPRESSION -> EXPRESSION
..} = case PAIR
pair of
PA_TAU{ATTRIBUTE
EXPRESSION
ARROW
$sel:attr:PA_TAU :: PAIR -> ATTRIBUTE
$sel:arrow:PA_TAU :: PAIR -> ARROW
$sel:expr:PA_TAU :: PAIR -> EXPRESSION
attr :: ATTRIBUTE
arrow :: ARROW
expr :: EXPRESSION
..} -> EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
colon Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ATTRIBUTE -> Text
forall a. Render a => a -> Text
render ATTRIBUTE
attr
PA_FORMATION{$sel:voids:PA_TAU :: PAIR -> [ATTRIBUTE]
voids = [], ATTRIBUTE
EXPRESSION
ARROW
$sel:attr:PA_TAU :: PAIR -> ATTRIBUTE
$sel:arrow:PA_TAU :: PAIR -> ARROW
$sel:expr:PA_TAU :: PAIR -> EXPRESSION
attr :: ATTRIBUTE
arrow :: ARROW
expr :: EXPRESSION
..} -> EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
colon Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ATTRIBUTE -> Text
forall a. Render a => a -> Text
render ATTRIBUTE
attr
PA_VOID{ATTRIBUTE
VOID
ARROW
$sel:attr:PA_TAU :: PAIR -> ATTRIBUTE
$sel:arrow:PA_TAU :: PAIR -> ARROW
$sel:void:PA_TAU :: PAIR -> VOID
attr :: ATTRIBUTE
arrow :: ARROW
void :: VOID
..} -> VOID -> Text
forall a. Render a => a -> Text
render VOID
void Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
colon Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> ATTRIBUTE -> Text
forall a. Render a => a -> Text
render ATTRIBUTE
attr
PA_DELTA{BYTES
$sel:bytes:PA_TAU :: PAIR -> BYTES
bytes :: BYTES
..} -> BYTES -> Text
forall a. Render a => a -> Text
render BYTES
bytes Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
colon Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> DELTA -> Text
forall a. Render a => a -> Text
render DELTA
DELTA
PA_DELTA'{BYTES
$sel:bytes:PA_TAU :: PAIR -> BYTES
bytes :: BYTES
..} -> BYTES -> Text
forall a. Render a => a -> Text
render BYTES
bytes Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
colon Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> DELTA -> Text
forall a. Render a => a -> Text
render DELTA
DELTA'
PA_META_DELTA{META
$sel:meta:PA_TAU :: PAIR -> META
meta :: META
..} -> META -> Text
forall a. Render a => a -> Text
render META
meta Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
colon Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> DELTA -> Text
forall a. Render a => a -> Text
render DELTA
DELTA
PA_META_DELTA'{META
$sel:meta:PA_TAU :: PAIR -> META
meta :: META
..} -> META -> Text
forall a. Render a => a -> Text
render META
meta Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
colon Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> DELTA -> Text
forall a. Render a => a -> Text
render DELTA
DELTA'
PA_LAMBDA{Text
$sel:func:PA_TAU :: PAIR -> Text
func :: Text
..} -> Text -> Text
forall a. Render a => a -> Text
render Text
func Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
colon Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> LAMBDA -> Text
forall a. Render a => a -> Text
render LAMBDA
LAMBDA
PA_LAMBDA'{Text
$sel:func:PA_TAU :: PAIR -> Text
func :: Text
..} -> Text -> Text
forall a. Render a => a -> Text
render Text
func Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
colon Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> LAMBDA -> Text
forall a. Render a => a -> Text
render LAMBDA
LAMBDA'
PA_META_LAMBDA{META
$sel:meta:PA_TAU :: PAIR -> META
meta :: META
..} -> META -> Text
forall a. Render a => a -> Text
render META
meta Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
colon Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> LAMBDA -> Text
forall a. Render a => a -> Text
render LAMBDA
LAMBDA
PA_META_LAMBDA'{META
$sel:meta:PA_TAU :: PAIR -> META
meta :: META
..} -> META -> Text
forall a. Render a => a -> Text
render META
meta Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
colon Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> LAMBDA -> Text
forall a. Render a => a -> Text
render LAMBDA
LAMBDA'
PAIR
_ -> EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
formation
where
colon :: T.Text
colon :: Text
colon = SPACE -> Text
forall a. Render a => a -> Text
render SPACE
space Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
":" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SPACE -> Text
forall a. Render a => a -> Text
render SPACE
space
instance Render [ATTRIBUTE] where
render :: [ATTRIBUTE] -> Text
render [ATTRIBUTE]
attrs = Text -> [Text] -> Text
T.intercalate Text
", " ((ATTRIBUTE -> Text) -> [ATTRIBUTE] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map ATTRIBUTE -> Text
forall a. Render a => a -> Text
render [ATTRIBUTE]
attrs)
instance Render ATTRIBUTE where
render :: ATTRIBUTE -> Text
render AT_LABEL{Text
label :: Text
$sel:label:AT_LABEL :: ATTRIBUTE -> Text
..} = Text -> Text
forall a. Render a => a -> Text
render Text
label
render AT_RHO{RHO
rho :: RHO
$sel:rho:AT_LABEL :: ATTRIBUTE -> RHO
..} = RHO -> Text
forall a. Render a => a -> Text
render RHO
rho
render AT_PHI{PHI
phi :: PHI
$sel:phi:AT_LABEL :: ATTRIBUTE -> PHI
..} = PHI -> Text
forall a. Render a => a -> Text
render PHI
phi
render AT_LAMBDA{LAMBDA
lambda :: LAMBDA
$sel:lambda:AT_LABEL :: ATTRIBUTE -> LAMBDA
..} = LAMBDA -> Text
forall a. Render a => a -> Text
render LAMBDA
lambda
render AT_DELTA{DELTA
delta :: DELTA
$sel:delta:AT_LABEL :: ATTRIBUTE -> DELTA
..} = DELTA -> Text
forall a. Render a => a -> Text
render DELTA
delta
render AT_META{META
meta :: META
$sel:meta:AT_LABEL :: ATTRIBUTE -> META
..} = META -> Text
forall a. Render a => a -> Text
render META
meta
render AT_REST{DOTS
dots :: DOTS
$sel:dots:AT_LABEL :: ATTRIBUTE -> DOTS
..} = DOTS -> Text
forall a. Render a => a -> Text
render DOTS
dots
instance Render BELONGING where
render :: BELONGING -> Text
render BELONGING
IN = Text
"\\in"
render BELONGING
NOT_IN = Text
"\\notin"
instance Render SET where
render :: SET -> Text
render ST_BINDING{BINDING
binding :: BINDING
$sel:binding:ST_BINDING :: SET -> BINDING
..} = BINDING -> Text
forall a. Render a => a -> Text
render BINDING
binding
render ST_ATTRIBUTES{[ATTRIBUTE]
attrs :: [ATTRIBUTE]
$sel:attrs:ST_BINDING :: SET -> [ATTRIBUTE]
..} = Text
"[ " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> [Text] -> Text
T.intercalate Text
" \\char44{} " ((ATTRIBUTE -> Text) -> [ATTRIBUTE] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map ATTRIBUTE -> Text
forall a. Render a => a -> Text
render [ATTRIBUTE]
attrs) Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" ]"
instance Render LOGIC_OPERATOR where
render :: LOGIC_OPERATOR -> Text
render LOGIC_OPERATOR
AND = Text
"\\phiText{and}"
render LOGIC_OPERATOR
OR = Text
"\\phiText{or}"
instance Render NUMBER where
render :: NUMBER -> Text
render IDX_META{META
meta :: META
$sel:meta:IDX_META :: NUMBER -> META
..} = META -> Text
forall a. Render a => a -> Text
render META
meta
render LENGTH{BINDING
binding :: BINDING
$sel:binding:IDX_META :: NUMBER -> BINDING
..} = Text
"\\vert " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> BINDING -> Text
forall a. Render a => a -> Text
render BINDING
binding Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" \\vert"
render DOMAIN{BINDING
$sel:binding:IDX_META :: NUMBER -> BINDING
binding :: BINDING
..} = Text
"\\vert \\overline{ " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> BINDING -> Text
forall a. Render a => a -> Text
render BINDING
binding Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" } \\vert"
render LITERAL{Int
num :: Int
$sel:num:IDX_META :: NUMBER -> Int
..} = String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
num)
instance Render COMPARABLE where
render :: COMPARABLE -> Text
render CMP_ATTR{ATTRIBUTE
attr :: ATTRIBUTE
$sel:attr:CMP_ATTR :: COMPARABLE -> ATTRIBUTE
..} = ATTRIBUTE -> Text
forall a. Render a => a -> Text
render ATTRIBUTE
attr
render CMP_EXPR{EXPRESSION
expr :: EXPRESSION
$sel:expr:CMP_ATTR :: COMPARABLE -> EXPRESSION
..} = EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr
render CMP_NUM{NUMBER
num :: NUMBER
$sel:num:CMP_ATTR :: COMPARABLE -> NUMBER
..} = NUMBER -> Text
forall a. Render a => a -> Text
render NUMBER
num
instance Render EQUAL where
render :: EQUAL -> Text
render EQUAL
EQUAL = Text
"="
render EQUAL
NOT_EQUAL = Text
"\\not="
render EQUAL
GREATER = Text
">"
render EQUAL
NOT_GREATER = Text
"\\leq"
instance Render CONDITION where
render :: CONDITION -> Text
render CO_BELONGS{SET
BELONGING
ATTRIBUTE
attr :: ATTRIBUTE
belongs :: BELONGING
set :: SET
$sel:attr:CO_EMPTY :: CONDITION -> ATTRIBUTE
$sel:belongs:CO_EMPTY :: CONDITION -> BELONGING
$sel:set:CO_EMPTY :: CONDITION -> SET
..} = ATTRIBUTE -> Text
forall a. Render a => a -> Text
render ATTRIBUTE
attr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> BELONGING -> Text
forall a. Render a => a -> Text
render BELONGING
belongs Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> SET -> Text
forall a. Render a => a -> Text
render SET
set
render CO_LOGIC{$sel:conditions:CO_EMPTY :: CONDITION -> [CONDITION]
conditions = [CONDITION
cond]} = CONDITION -> Text
forall a. Render a => a -> Text
render CONDITION
cond
render CO_LOGIC{[CONDITION]
LOGIC_OPERATOR
$sel:conditions:CO_EMPTY :: CONDITION -> [CONDITION]
conditions :: [CONDITION]
operator :: LOGIC_OPERATOR
$sel:operator:CO_EMPTY :: CONDITION -> LOGIC_OPERATOR
..} = Text -> [Text] -> Text
T.intercalate (Text
" " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> LOGIC_OPERATOR -> Text
forall a. Render a => a -> Text
render LOGIC_OPERATOR
operator Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" ") ((CONDITION -> Text) -> [CONDITION] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map CONDITION -> Text
renderWrapped [CONDITION]
conditions)
where
renderWrapped :: CONDITION -> Text
renderWrapped :: CONDITION -> Text
renderWrapped CO_LOGIC{$sel:conditions:CO_EMPTY :: CONDITION -> [CONDITION]
conditions = [CONDITION
cond]} = CONDITION -> Text
forall a. Render a => a -> Text
render CONDITION
cond
renderWrapped cond :: CONDITION
cond@CO_LOGIC{} = Text
"\\lparen " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> CONDITION -> Text
forall a. Render a => a -> Text
render CONDITION
cond Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" \\rparen"
renderWrapped CONDITION
cond = CONDITION -> Text
forall a. Render a => a -> Text
render CONDITION
cond
render CO_NF{EXPRESSION
expr :: EXPRESSION
$sel:expr:CO_EMPTY :: CONDITION -> EXPRESSION
..} = Text
"\\isnormal{ " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" }"
render CO_ABSOLUTE{$sel:belongs:CO_EMPTY :: CONDITION -> BELONGING
belongs = BELONGING
NOT_IN, EXPRESSION
$sel:expr:CO_EMPTY :: CONDITION -> EXPRESSION
expr :: EXPRESSION
..} = Text
"\\phinoNotAbsolute{ " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" }"
render CO_ABSOLUTE{BELONGING
EXPRESSION
$sel:belongs:CO_EMPTY :: CONDITION -> BELONGING
$sel:expr:CO_EMPTY :: CONDITION -> EXPRESSION
expr :: EXPRESSION
belongs :: BELONGING
..} = Text
"\\phinoAbsolute{ " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" }"
render CO_NOT{$sel:condition:CO_EMPTY :: CONDITION -> CONDITION
condition = CO_FORMATION{EXPRESSION
$sel:expr:CO_EMPTY :: CONDITION -> EXPRESSION
expr :: EXPRESSION
..}} = Text
"\\phinoNotFormation{ " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" }"
render CO_NOT{CONDITION
$sel:condition:CO_EMPTY :: CONDITION -> CONDITION
condition :: CONDITION
..} = Text -> CONDITION -> Text
forall a. Render a => Text -> a -> Text
renderFunc Text
"not" CONDITION
condition
where
renderFunc :: Render a => Text -> a -> Text
renderFunc :: forall a. Render a => Text -> a -> Text
renderFunc Text
func a
renderable = Text
func Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"\\lparen " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> a -> Text
forall a. Render a => a -> Text
render a
renderable Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" \\rparen"
render CO_COMPARE{COMPARABLE
EQUAL
left :: COMPARABLE
equal :: EQUAL
right :: COMPARABLE
$sel:left:CO_EMPTY :: CONDITION -> COMPARABLE
$sel:equal:CO_EMPTY :: CONDITION -> EQUAL
$sel:right:CO_EMPTY :: CONDITION -> COMPARABLE
..} = COMPARABLE -> Text
forall a. Render a => a -> Text
render COMPARABLE
left Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EQUAL -> Text
forall a. Render a => a -> Text
render EQUAL
equal Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> COMPARABLE -> Text
forall a. Render a => a -> Text
render COMPARABLE
right
render CO_MATCHES{String
EXPRESSION
$sel:expr:CO_EMPTY :: CONDITION -> EXPRESSION
regex :: String
expr :: EXPRESSION
$sel:regex:CO_EMPTY :: CONDITION -> String
..} = Text
"matches\\lparen " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack String
regex Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
", " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" \\rparen"
render CO_PART_OF{EXPRESSION
BINDING
$sel:expr:CO_EMPTY :: CONDITION -> EXPRESSION
expr :: EXPRESSION
binding :: BINDING
$sel:binding:CO_EMPTY :: CONDITION -> BINDING
..} = Text
"part-of\\lparen " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
", " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> BINDING -> Text
forall a. Render a => a -> Text
render BINDING
binding Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" \\rparen"
render CO_FORMATION{EXPRESSION
$sel:expr:CO_EMPTY :: CONDITION -> EXPRESSION
expr :: EXPRESSION
..} = Text
"\\phinoIsFormation{ " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" }"
render CO_DISJOINT{[ATTRIBUTE]
[BINDING]
attrs :: [ATTRIBUTE]
groups :: [BINDING]
$sel:attrs:CO_EMPTY :: CONDITION -> [ATTRIBUTE]
$sel:groups:CO_EMPTY :: CONDITION -> [BINDING]
..} = SET -> Text
forall a. Render a => a -> Text
render ([ATTRIBUTE] -> SET
ST_ATTRIBUTES [ATTRIBUTE]
attrs) Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" \\cap " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> [BINDING] -> Text
union [BINDING]
groups Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" = \\emptyset"
render CO_SUBSET{$sel:attrs:CO_EMPTY :: CONDITION -> [ATTRIBUTE]
attrs = [ATTRIBUTE
attr], [BINDING]
BELONGING
$sel:belongs:CO_EMPTY :: CONDITION -> BELONGING
$sel:groups:CO_EMPTY :: CONDITION -> [BINDING]
belongs :: BELONGING
groups :: [BINDING]
..} = ATTRIBUTE -> Text
forall a. Render a => a -> Text
render ATTRIBUTE
attr Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> BELONGING -> Text
forall a. Render a => a -> Text
render BELONGING
belongs Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> [BINDING] -> Text
union [BINDING]
groups
render CO_SUBSET{$sel:belongs:CO_EMPTY :: CONDITION -> BELONGING
belongs = BELONGING
NOT_IN, [ATTRIBUTE]
[BINDING]
$sel:attrs:CO_EMPTY :: CONDITION -> [ATTRIBUTE]
$sel:groups:CO_EMPTY :: CONDITION -> [BINDING]
attrs :: [ATTRIBUTE]
groups :: [BINDING]
..} = SET -> Text
forall a. Render a => a -> Text
render ([ATTRIBUTE] -> SET
ST_ATTRIBUTES [ATTRIBUTE]
attrs) Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" \\not\\subseteq " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> [BINDING] -> Text
union [BINDING]
groups
render CO_SUBSET{[ATTRIBUTE]
[BINDING]
BELONGING
$sel:belongs:CO_EMPTY :: CONDITION -> BELONGING
$sel:attrs:CO_EMPTY :: CONDITION -> [ATTRIBUTE]
$sel:groups:CO_EMPTY :: CONDITION -> [BINDING]
attrs :: [ATTRIBUTE]
belongs :: BELONGING
groups :: [BINDING]
..} = SET -> Text
forall a. Render a => a -> Text
render ([ATTRIBUTE] -> SET
ST_ATTRIBUTES [ATTRIBUTE]
attrs) Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" \\subseteq " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> [BINDING] -> Text
union [BINDING]
groups
render CONDITION
CO_EMPTY = Text
""
union :: [BINDING] -> Text
union :: [BINDING] -> Text
union [BINDING
group] = BINDING -> Text
forall a. Render a => a -> Text
render BINDING
group
union [BINDING]
groups = Text
"\\lparen " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> [Text] -> Text
T.intercalate Text
" \\cup " ((BINDING -> Text) -> [BINDING] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map BINDING -> Text
forall a. Render a => a -> Text
render [BINDING]
groups) Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" \\rparen"
instance Render EXTRA_ARG where
render :: EXTRA_ARG -> Text
render ARG_ATTR{ATTRIBUTE
attr :: ATTRIBUTE
$sel:attr:ARG_EXPR :: EXTRA_ARG -> ATTRIBUTE
..} = ATTRIBUTE -> Text
forall a. Render a => a -> Text
render ATTRIBUTE
attr
render ARG_EXPR{EXPRESSION
expr :: EXPRESSION
$sel:expr:ARG_EXPR :: EXTRA_ARG -> EXPRESSION
..} = EXPRESSION -> Text
forall a. Render a => a -> Text
render EXPRESSION
expr
render ARG_BINDING{BINDING
binding :: BINDING
$sel:binding:ARG_EXPR :: EXTRA_ARG -> BINDING
..} = BINDING -> Text
forall a. Render a => a -> Text
render BINDING
binding
render ARG_BYTES{BYTES
bytes :: BYTES
$sel:bytes:ARG_EXPR :: EXTRA_ARG -> BYTES
..} = BYTES -> Text
forall a. Render a => a -> Text
render BYTES
bytes
instance Render EXTRA where
render :: EXTRA -> Text
render EXTRA{$sel:func:EXTRA :: EXTRA -> String
func = String
"contextualize", $sel:args:EXTRA :: EXTRA -> [EXTRA_ARG]
args = EXTRA_ARG
arg : [EXTRA_ARG]
rest, EXTRA_ARG
meta :: EXTRA_ARG
$sel:meta:EXTRA :: EXTRA -> EXTRA_ARG
..} = Text
"\\phinoContextualize{ " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EXTRA_ARG -> Text
forall a. Render a => a -> Text
render EXTRA_ARG
arg Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" }{ " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> [Text] -> Text
T.intercalate Text
", " ((EXTRA_ARG -> Text) -> [EXTRA_ARG] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map EXTRA_ARG -> Text
forall a. Render a => a -> Text
render [EXTRA_ARG]
rest) Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" }{ " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EXTRA_ARG -> Text
forall a. Render a => a -> Text
render EXTRA_ARG
meta Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" }"
render EXTRA{$sel:func:EXTRA :: EXTRA -> String
func = String
"morph", [EXTRA_ARG]
EXTRA_ARG
$sel:args:EXTRA :: EXTRA -> [EXTRA_ARG]
$sel:meta:EXTRA :: EXTRA -> EXTRA_ARG
meta :: EXTRA_ARG
args :: [EXTRA_ARG]
..} = EXTRA_ARG -> Text
forall a. Render a => a -> Text
render EXTRA_ARG
meta Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" \\coloneqq \\phinoMorph{ " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> [Text] -> Text
T.intercalate Text
", " ((EXTRA_ARG -> Text) -> [EXTRA_ARG] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map EXTRA_ARG -> Text
forall a. Render a => a -> Text
render [EXTRA_ARG]
args) Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" }{ e }{ s_1 }"
render EXTRA{$sel:func:EXTRA :: EXTRA -> String
func = String
"named", $sel:args:EXTRA :: EXTRA -> [EXTRA_ARG]
args = [EXTRA_ARG
form], EXTRA_ARG
$sel:meta:EXTRA :: EXTRA -> EXTRA_ARG
meta :: EXTRA_ARG
..} = Text
"\\phinoNamed{ " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EXTRA_ARG -> Text
forall a. Render a => a -> Text
render EXTRA_ARG
meta Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" }{ " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> EXTRA_ARG -> Text
forall a. Render a => a -> Text
render EXTRA_ARG
form Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" }"
render EXTRA{String
[EXTRA_ARG]
EXTRA_ARG
$sel:func:EXTRA :: EXTRA -> String
$sel:args:EXTRA :: EXTRA -> [EXTRA_ARG]
$sel:meta:EXTRA :: EXTRA -> EXTRA_ARG
meta :: EXTRA_ARG
func :: String
args :: [EXTRA_ARG]
..} = EXTRA_ARG -> Text
forall a. Render a => a -> Text
render EXTRA_ARG
meta Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" \\coloneqq " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
macro String
func Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"{ " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> [Text] -> Text
T.intercalate Text
", " ((EXTRA_ARG -> Text) -> [EXTRA_ARG] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map EXTRA_ARG -> Text
forall a. Render a => a -> Text
render [EXTRA_ARG]
args) Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" }"
where
macro :: String -> Text
macro :: String -> Text
macro String
"evaluate" = Text
"\\phinoEvaluate"
macro String
name = Text
"\\" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> [Text] -> Text
T.concat ((Int -> Text -> Text) -> [Int] -> [Text] -> [Text]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith Int -> Text -> Text
camel [Int
0 :: Int ..] (HasCallStack => Text -> Text -> [Text]
Text -> Text -> [Text]
T.splitOn Text
"-" (String -> Text
T.pack String
name)))
camel :: Int -> Text -> Text
camel :: Int -> Text -> Text
camel Int
0 Text
part = Text
part
camel Int
_ Text
part = Text -> Text
T.toTitle Text
part