diff options
author | Nadrieril | 2019-04-04 18:12:19 +0200 |
---|---|---|
committer | Nadrieril | 2019-04-04 18:12:19 +0200 |
commit | 04c6cd248aff1cbce68ae2fb997705e921d21809 (patch) | |
tree | 94f296ab1a70247e5019e76095ff4b0f0c060c04 /dhall_core/src/parser.rs | |
parent | 4fe44eea36eaf3cc21ef46740825e9aae4d1ea9e (diff) |
Tweak matching on Some/None
Diffstat (limited to '')
-rw-r--r-- | dhall_core/src/parser.rs | 30 |
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()) }, )); |