summaryrefslogtreecommitdiff
path: root/dhall/src/core/var.rs
diff options
context:
space:
mode:
Diffstat (limited to 'dhall/src/core/var.rs')
-rw-r--r--dhall/src/core/var.rs12
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))