diff options
author | Nadrieril | 2019-04-12 16:33:49 +0200 |
---|---|---|
committer | Nadrieril | 2019-04-12 16:33:49 +0200 |
commit | 35e19e0f7c3dcfcd4203a3aaaa73d6f26db276f5 (patch) | |
tree | da5c9d6e936ba97d7ccadc213ea2c5a197ebe15b /dhall/src/normalize.rs | |
parent | 7ba857a96eebbdd1cef0aa22407c870887d24aed (diff) | |
parent | 5fcc7f69c7a68b08ff223217e8af9f8edb2cc761 (diff) |
Merge branch 'lifetimes'
Closes #55
Diffstat (limited to 'dhall/src/normalize.rs')
-rw-r--r-- | dhall/src/normalize.rs | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/dhall/src/normalize.rs b/dhall/src/normalize.rs index 1adc0f8..d6c3805 100644 --- a/dhall/src/normalize.rs +++ b/dhall/src/normalize.rs @@ -4,13 +4,17 @@ use dhall_core::*; use dhall_generator::dhall_expr; use std::fmt; -impl Typed { - pub fn normalize(self) -> Normalized { - Normalized(normalize(self.0), self.1) +impl<'a> Typed<'a> { + pub fn normalize(self) -> Normalized<'a> { + Normalized(normalize(self.0), self.1, self.2) } /// Pretends this expression is normalized. Use with care. - pub fn skip_normalize(self) -> Normalized { - Normalized(self.0.unroll().squash_embed(&|e| e.0.clone()), self.1) + pub fn skip_normalize(self) -> Normalized<'a> { + Normalized( + self.0.unroll().squash_embed(&|e| e.0.clone()), + self.1, + self.2, + ) } } @@ -221,11 +225,11 @@ enum WhatNext<'a, S, A> { DoneAsIs, } -fn normalize_ref(expr: &Expr<X, Normalized>) -> Expr<X, X> { +fn normalize_ref(expr: &Expr<X, Normalized<'static>>) -> Expr<X, X> { use dhall_core::BinOp::*; use dhall_core::ExprF::*; // Recursively normalize all subexpressions - let expr: ExprF<Expr<X, X>, Label, X, Normalized> = + let expr: ExprF<Expr<X, X>, Label, X, Normalized<'static>> = expr.map_ref_simple(|e| normalize_ref(e.as_ref())); use WhatNext::*; @@ -327,7 +331,7 @@ fn normalize_ref(expr: &Expr<X, Normalized>) -> Expr<X, X> { /// However, `normalize` will not fail if the expression is ill-typed and will /// leave ill-typed sub-expressions unevaluated. /// -fn normalize(e: SubExpr<X, Normalized>) -> SubExpr<X, X> { +fn normalize(e: SubExpr<X, Normalized<'static>>) -> SubExpr<X, X> { normalize_ref(e.as_ref()).roll() } |