diff options
author | Nadrieril | 2019-08-16 23:17:46 +0200 |
---|---|---|
committer | Nadrieril | 2019-08-16 23:18:01 +0200 |
commit | 8dec798929f35df15a7bc3a6caa4f0c7954c4ffc (patch) | |
tree | d57db0de1dad7e4c392d59e4366d8b96f1f6893c /dhall/src/core/var.rs | |
parent | cc0c6cc420ca8019665e745797758c997cc35358 (diff) |
Share type alongside the value in a thunk
Diffstat (limited to '')
-rw-r--r-- | dhall/src/core/var.rs | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/dhall/src/core/var.rs b/dhall/src/core/var.rs index 8d02171..ce4d137 100644 --- a/dhall/src/core/var.rs +++ b/dhall/src/core/var.rs @@ -157,6 +157,12 @@ impl Shift for () { } } +impl<A: Shift, B: Shift> Shift for (A, B) { + fn shift(&self, delta: isize, var: &AlphaVar) -> Option<Self> { + Some((self.0.shift(delta, var)?, self.1.shift(delta, var)?)) + } +} + impl<T: Shift> Shift for Option<T> { fn shift(&self, delta: isize, var: &AlphaVar) -> Option<Self> { Some(match self { @@ -230,6 +236,12 @@ impl<S> Subst<S> for () { fn subst_shift(&self, _var: &AlphaVar, _val: &S) -> Self {} } +impl<S, A: Subst<S>, B: Subst<S>> Subst<S> for (A, B) { + fn subst_shift(&self, var: &AlphaVar, val: &S) -> Self { + (self.0.subst_shift(var, val), self.1.subst_shift(var, val)) + } +} + impl<S, T: Subst<S>> Subst<S> for Option<T> { fn subst_shift(&self, var: &AlphaVar, val: &S) -> Self { self.as_ref().map(|x| x.subst_shift(var, val)) |