diff options
author | Nadrieril | 2019-05-02 14:11:29 +0200 |
---|---|---|
committer | Nadrieril | 2019-05-02 14:11:29 +0200 |
commit | c13a4881b56bf2f5b2d5d4d0018a48927b45e7e0 (patch) | |
tree | 442c2b257db627209ac963a17f80c475df4272b0 /dhall/src/expr.rs | |
parent | 5465b7e2b8cc286e2e8b87556b3ec6a2476cf0cf (diff) |
Store Thunk in Normalized
Diffstat (limited to 'dhall/src/expr.rs')
-rw-r--r-- | dhall/src/expr.rs | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/dhall/src/expr.rs b/dhall/src/expr.rs index 1ddc4ba..a753ffd 100644 --- a/dhall/src/expr.rs +++ b/dhall/src/expr.rs @@ -45,11 +45,24 @@ pub(crate) struct Typed<'a>( #[derive(Debug, Clone)] pub(crate) struct Normalized<'a>( - pub(crate) SubExpr<X, X>, + pub(crate) crate::normalize::Thunk, pub(crate) Option<Type<'static>>, pub(crate) PhantomData<&'a ()>, ); -derive_other_traits!(Normalized); + +impl<'a> std::cmp::PartialEq for Normalized<'a> { + fn eq(&self, other: &Self) -> bool { + self.0.normalize_to_expr() == other.0.normalize_to_expr() + } +} + +impl<'a> std::cmp::Eq for Normalized<'a> {} + +impl<'a> std::fmt::Display for Normalized<'a> { + fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { + self.0.normalize_to_expr().fmt(f) + } +} /// A Dhall expression representing a simple type. /// @@ -102,21 +115,20 @@ impl<'a> From<SubExpr<X, X>> for SimpleType<'a> { #[doc(hidden)] impl<'a> From<Normalized<'a>> for Typed<'a> { fn from(x: Normalized<'a>) -> Typed<'a> { - Typed( - crate::normalize::Thunk::new( - crate::normalize::NormalizationContext::new(), - x.0.embed_absurd(), - ), - x.1, - x.2, - ) + Typed(x.0, x.1, x.2) } } -#[doc(hidden)] impl<'a> Normalized<'a> { - pub(crate) fn as_expr(&self) -> &SubExpr<X, X> { - &self.0 + // Deprecated + pub(crate) fn as_expr(&self) -> SubExpr<X, X> { + self.0.normalize_to_expr() + } + pub(crate) fn to_expr(&self) -> SubExpr<X, X> { + self.0.normalize_to_expr() + } + pub(crate) fn to_value(&self) -> crate::normalize::Value { + self.0.normalize_nf().clone() } #[allow(dead_code)] pub(crate) fn unnote<'b>(self) -> Normalized<'b> { |