diff options
Diffstat (limited to 'dhall/src/semantics/core/var.rs')
-rw-r--r-- | dhall/src/semantics/core/var.rs | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/dhall/src/semantics/core/var.rs b/dhall/src/semantics/core/var.rs index a110632..7c2c4de 100644 --- a/dhall/src/semantics/core/var.rs +++ b/dhall/src/semantics/core/var.rs @@ -1,3 +1,5 @@ +use std::collections::HashMap; + use crate::syntax::{Label, V}; /// Stores a pair of variables: a normal one and one @@ -38,6 +40,20 @@ impl AlphaVar { // Can't fail since delta is positive self.shift(1, &x.into()).unwrap() } + pub(crate) fn under_multiple_binders( + &self, + shift_map: &HashMap<Label, usize>, + ) -> Self + where + Self: Clone, + { + let mut v = self.clone(); + for (x, n) in shift_map { + // Can't fail since delta is positive + v = v.shift(*n as isize, &x.into()).unwrap(); + } + v + } } impl Binder { |