From 86089b4bee42d888cd0b46245937b518de0a2120 Mon Sep 17 00:00:00 2001 From: rvcas Date: Thu, 9 Jun 2022 00:44:52 -0400 Subject: [PATCH] fix: different attempt --- crates/uplc/src/parser.rs | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/crates/uplc/src/parser.rs b/crates/uplc/src/parser.rs index 4b2473de..e85bd00e 100644 --- a/crates/uplc/src/parser.rs +++ b/crates/uplc/src/parser.rs @@ -71,19 +71,21 @@ fn version() -> impl Parser> { fn term() -> impl Parser, Error = Simple> { recursive(|term| { + let atom = || var().or(term.clone()); + let delay = keyword("delay") - .ignore_then(term.clone().padded()) + .ignore_then(atom().padded()) .delimited_by(just('(').padded(), just(')').padded()) .map(|t| dbg!(Term::Delay(Box::new(t)))); let force = keyword("force") - .ignore_then(term.clone().padded()) + .ignore_then(atom().padded()) .delimited_by(just('(').padded(), just(')').padded()) .map(|t| dbg!(Term::Force(Box::new(t)))); let lambda = keyword("lam") .ignore_then(name().padded()) - .then(term.clone()) + .then(atom()) .delimited_by(just('(').padded(), just(')').padded()) .map(|(parameter_name, t)| { dbg!(Term::Lambda { @@ -92,17 +94,16 @@ fn term() -> impl Parser, Error = Simple> { }) }); - let apply = recursive(|a| { - var() - .or(term.clone()) - .padded() - .then(a) - .map(|(function, argument)| Term::Apply { + let apply = atom() + .padded() + .then(atom()) + .delimited_by(just('[').padded(), just(']').padded()) + .map(|(function, argument)| { + dbg!(Term::Apply { function: Box::new(function), argument: Box::new(argument), }) - }) - .delimited_by(just('[').padded(), just(']').padded()); + }); constant() .or(builtin())