From 4cd6c39d6d61c1d5a2670fe52c79bce4f11facdb Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Tue, 12 Mar 2019 00:14:50 +0100 Subject: Handle Some and None builtins Closes #19 --- dhall_core/src/core.rs | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'dhall_core') diff --git a/dhall_core/src/core.rs b/dhall_core/src/core.rs index 9c96b2a..9f4beb3 100644 --- a/dhall_core/src/core.rs +++ b/dhall_core/src/core.rs @@ -257,6 +257,8 @@ pub enum Builtin { Text, List, Optional, + OptionalSome, + OptionalNone, NaturalBuild, NaturalFold, NaturalIsZero, @@ -462,13 +464,19 @@ impl Expr { Ok(()) } &OptionalLit(ref t, ref es) => { - fmt_list("[", "]", es, f, |e, f| e.fmt(f))?; - match t { - Some(t) => { - write!(f, " : Optional ")?; - t.fmt_e(f)? + match es.iter().next() { + None => { + write!(f, "None ")?; + t.as_ref().unwrap().fmt_e(f)?; + } + Some(e) => { + write!(f, "Some ")?; + e.fmt_e(f)?; + if let Some(t) = t { + write!(f, " : Optional ")?; + t.fmt_e(f)?; + } } - None => {} } Ok(()) } @@ -624,6 +632,8 @@ impl Display for Builtin { Text => "Text", List => "List", Optional => "Optional", + OptionalSome => "Some", + OptionalNone => "None", NaturalBuild => "Natural/build", NaturalFold => "Natural/fold", NaturalIsZero => "Natural/isZero", @@ -659,6 +669,8 @@ impl Builtin { "Text" => Some(Text), "List" => Some(List), "Optional" => Some(Optional), + "Some" => Some(OptionalSome), + "None" => Some(OptionalNone), "Natural/build" => Some(NaturalBuild), "Natural/fold" => Some(NaturalFold), "Natural/isZero" => Some(NaturalIsZero), -- cgit v1.2.3