From 5c16a75c6dc01bbd0bfe36be4a9b337a762632a8 Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Mon, 29 Apr 2019 16:27:14 +0200 Subject: Properly substitute when typing App --- dhall/src/normalize.rs | 185 +++++++++++++++++++++++++++++++++++++++++++++---- dhall/src/typecheck.rs | 90 ++++++++++++------------ dhall_core/src/core.rs | 23 +++--- 3 files changed, 233 insertions(+), 65 deletions(-) diff --git a/dhall/src/normalize.rs b/dhall/src/normalize.rs index 88a55a1..dd9474d 100644 --- a/dhall/src/normalize.rs +++ b/dhall/src/normalize.rs @@ -25,9 +25,9 @@ impl<'a> Typed<'a> { /// leave ill-typed sub-expressions unevaluated. /// pub fn normalize(self) -> Normalized<'a> { - self.normalize_whnf().normalize() + self.partially_normalize().normalize() } - pub(crate) fn normalize_whnf(self) -> PartiallyNormalized<'a> { + pub(crate) fn partially_normalize(self) -> PartiallyNormalized<'a> { PartiallyNormalized( normalize_whnf( NormalizationContext::from_typecheck_ctx(&self.2), @@ -61,6 +61,20 @@ impl<'a> PartiallyNormalized<'a> { self.2, ) } + pub(crate) fn subst_shift( + &self, + var: &V