From cc0c6cc420ca8019665e745797758c997cc35358 Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Fri, 16 Aug 2019 22:33:16 +0200 Subject: Use generic Shift/Subst impls --- dhall/src/core/thunk.rs | 35 ++++++++--------------------------- 1 file changed, 8 insertions(+), 27 deletions(-) (limited to 'dhall/src/core/thunk.rs') diff --git a/dhall/src/core/thunk.rs b/dhall/src/core/thunk.rs index e315a90..b6358ef 100644 --- a/dhall/src/core/thunk.rs +++ b/dhall/src/core/thunk.rs @@ -266,24 +266,16 @@ impl TypedThunk { impl Shift for Thunk { fn shift(&self, delta: isize, var: &AlphaVar) -> Option { - Some( - self.0 - .borrow() - .shift(delta, var)? - .into_thunk(self.1.shift(delta, var)?), - ) + Some(Thunk(self.0.shift(delta, var)?, self.1.shift(delta, var)?)) } } impl Shift for ThunkInternal { fn shift(&self, delta: isize, var: &AlphaVar) -> Option { Some(match self { - ThunkInternal::PartialExpr(e) => ThunkInternal::PartialExpr( - e.traverse_ref_with_special_handling_of_binders( - |v| Ok(v.shift(delta, var)?), - |x, v| Ok(v.shift(delta, &var.under_binder(x))?), - )?, - ), + ThunkInternal::PartialExpr(e) => { + ThunkInternal::PartialExpr(e.shift(delta, var)?) + } ThunkInternal::ValueF(m, v) => { ThunkInternal::ValueF(*m, v.shift(delta, var)?) } @@ -301,27 +293,16 @@ impl Shift for TypedThunk { impl Subst for Thunk { fn subst_shift(&self, var: &AlphaVar, val: &Typed) -> Self { - self.0 - .borrow() - .subst_shift(var, val) - .into_thunk(self.1.subst_shift(var, val)) + Thunk(self.0.subst_shift(var, val), self.1.subst_shift(var, val)) } } impl Subst for ThunkInternal { fn subst_shift(&self, var: &AlphaVar, val: &Typed) -> Self { match self { - ThunkInternal::PartialExpr(e) => ThunkInternal::PartialExpr( - e.map_ref_with_special_handling_of_binders( - |v| v.subst_shift(var, val), - |x, v| { - v.subst_shift( - &var.under_binder(x), - &val.under_binder(x), - ) - }, - ), - ), + ThunkInternal::PartialExpr(e) => { + ThunkInternal::PartialExpr(e.subst_shift(var, val)) + } ThunkInternal::ValueF(_, v) => { // The resulting value may not stay in normal form after substitution ThunkInternal::ValueF(WHNF, v.subst_shift(var, val)) -- cgit v1.2.3