Macro fungi_lang::fgi_index
source · macro_rules! fgi_index {
{ fromast $ast:expr } => { ... };
{ ^ $ast:expr } => { ... };
{ ? } => { ... };
{ nmtm $($nmtm:tt)+ } => { ... };
{ ($($i:tt)+) } => { ... };
{ {$($nmtm:tt)+} } => { ... };
{ @! } => { ... };
{ 0 } => { ... };
{ $x:tt * $y:tt } => { ... };
{ $x:tt % $y:tt } => { ... };
{ $x:tt % $y:tt $($more:tt)+ } => { ... };
{ $x:tt U $y:tt } => { ... };
{ $x:tt U $y:tt $($more:tt)+ } => { ... };
{ () } => { ... };
{ ($i:tt,$j:tt) } => { ... };
{ prj1 $($i:tt)+ } => { ... };
{ prj2 $($i:tt)+ } => { ... };
{ # $a:ident : $sort:tt . $($body:tt)+ } => { ... };
{ {$($i:tt)+} $par:tt } => { ... };
{ {$($i:tt)+} $par:tt $($pars:tt)+ } => { ... };
{ [$($m:tt)+] $($par:tt)+ } => { ... };
{ ($($i:tt)+) ^ * $($j:tt)+ } => { ... };
{ ($($i:tt)+) $($par:tt)+ } => { ... };
{ $var:ident } => { ... };
{ $($any:tt)* } => { ... };
}
Expand description
Parser for Index Terms
i,j,X,Y ::=
fromast ast (inject ast nodes)
nmtm M (name term, as an index term)
@! (write scope function, lifted to name sets)
(i) (parens)
{N} (singleton name set)
0 (empty set)
X % Y ... (separating union extended - left to right)
X U Y ... (union extended - left to right)
X * Y (pair-wise name combination of two sets)
() (unit)
(i,j) (pairing)
prj1 i (projection)
prj2 i (projection)
#a:g.i (abstraction)
{i} j ... (curried application)
[M] j (mapping)
(i) j (flatmapping)
(i)^* j (iterated flatmapping)
a (variable)