summaryrefslogtreecommitdiff
path: root/dhall_core/src/parser.rs
diff options
context:
space:
mode:
authorNadrieril2019-04-04 18:12:19 +0200
committerNadrieril2019-04-04 18:12:19 +0200
commit04c6cd248aff1cbce68ae2fb997705e921d21809 (patch)
tree94f296ab1a70247e5019e76095ff4b0f0c060c04 /dhall_core/src/parser.rs
parent4fe44eea36eaf3cc21ef46740825e9aae4d1ea9e (diff)
Tweak matching on Some/None
Diffstat (limited to '')
-rw-r--r--dhall_core/src/parser.rs30
1 files changed, 9 insertions, 21 deletions
diff --git a/dhall_core/src/parser.rs b/dhall_core/src/parser.rs
index a0e4397..68796c4 100644
--- a/dhall_core/src/parser.rs
+++ b/dhall_core/src/parser.rs
@@ -700,28 +700,16 @@ make_parser! {
rule!(application_expression<ParsedExpr> as expression; children!(
[expression(e)] => e,
- [expression(first), expression(second)] => {
- match first {
- Expr::Builtin(Builtin::OptionalNone) =>
- Expr::EmptyOptionalLit(rc(second)),
- Expr::Builtin(Builtin::OptionalSome) =>
- Expr::NEOptionalLit(rc(second)),
- _ => Expr::App(rc(first), vec![rc(second)]),
- }
+ [expression(Expr::Builtin(Builtin::OptionalNone)),
+ expression(e), expression(rest)..] => {
+ app(Expr::EmptyOptionalLit(rc(e)), rest.map(rc).collect())
},
- [expression(first), expression(second), expression(rest)..] => {
- match first {
- Expr::Builtin(Builtin::OptionalNone) =>
- Expr::App(rc(Expr::EmptyOptionalLit(rc(second))),
- rest.map(rc).collect()),
- Expr::Builtin(Builtin::OptionalSome) =>
- Expr::App(rc(Expr::NEOptionalLit(rc(second))),
- rest.map(rc).collect()),
- _ => Expr::App(rc(first),
- std::iter::once(rc(second))
- .chain(rest.map(rc))
- .collect()),
- }
+ [expression(Expr::Builtin(Builtin::OptionalSome)),
+ expression(e), expression(rest)..] => {
+ app(Expr::NEOptionalLit(rc(e)), rest.map(rc).collect())
+ },
+ [expression(first), expression(rest)..] => {
+ app(first, rest.map(rc).collect())
},
));