Diffstat (limited to 'src/parser/fun.rs')
-rw-r--r--src/parser/fun.rs17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/parser/fun.rs b/src/parser/fun.rs
index facec08..93cf595 100644
--- a/src/parser/fun.rs
+++ b/src/parser/fun.rs
@@ -11,11 +11,11 @@ pub enum NumberΛ<'s> {
#[derive(Debug, Clone)]
pub enum Function<'s> {
- Both(Λ<'s>),
+ Both(Spanned<Λ<'s>>),
And(Spanned<Λ<'s>>, Spanned<Λ<'s>>),
If { then: Λ<'s>, or: Λ<'s> },
Array(Option<NumberΛ<'s>>),
- Map(Λ<'s>),
+ Map(Spanned<Λ<'s>>),
Dup,
Flip,
Eq,
@@ -47,11 +47,12 @@ pub enum Function<'s> {
Mask,
Group(Λ<'s>),
Split,
+ Open,
First,
Last,
- Reduce(Λ<'s>),
+ Reduce(Spanned<Λ<'s>>),
Range,
- With,
+ With(Spanned<Λ<'s>>),
Call,
Sort,
Zip,
@@ -102,8 +103,8 @@ impl<'s> Function<'s> {
Token::Zip => Zip,
Token::Div => Div,
Token::Mod => Mod,
+ Token::Open => Open,
Token::Mask => Mask,
- Token::With => With,
Token::Split => Split,
Token::First => First,
Token::Ne => Ne,
@@ -126,6 +127,7 @@ impl<'s> Function<'s> {
fn_param
.clone()
.then_ignore(just(Token::$name))
+ .map_with(spanned!())
.map($name)
.labelled(stringify!($name))
};
@@ -146,11 +148,12 @@ impl<'s> Function<'s> {
one![Both],
one![Reduce],
one![Map],
+ one![With],
λ.clone()
.then_ignore(just(Token::Group).labelled("group"))
.map(Group),
choice((
- just(Token::Array).ignore_then(
+ just(Token::ArrayN).ignore_then(
fn_param
.clone()
.map_with(spanned!())
@@ -159,7 +162,7 @@ impl<'s> Function<'s> {
.map(Some)
.map(Array),
),
- just(Token::Array).map(|_| Array(None)),
+ t![']'].map(|_| Array(None)),
))
.labelled("array")
.boxed(),