diff options
author | Nadrieril | 2019-12-27 15:15:08 +0000 |
---|---|---|
committer | Nadrieril | 2020-01-17 10:06:00 +0000 |
commit | 8e2da26650e202f9ccb1531fc8a88cfd89e54b6d (patch) | |
tree | 142391d96492be8268cbd32946699053cac076d7 /dhall/src/semantics/core/value.rs | |
parent | 8edbeadbd0dc06a75ffb8bf3b0a54a62e3acc5fc (diff) |
Implement traverse_ref for ValueKind
Diffstat (limited to 'dhall/src/semantics/core/value.rs')
-rw-r--r-- | dhall/src/semantics/core/value.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/dhall/src/semantics/core/value.rs b/dhall/src/semantics/core/value.rs index 5f244b7..f7c2fbf 100644 --- a/dhall/src/semantics/core/value.rs +++ b/dhall/src/semantics/core/value.rs @@ -388,6 +388,34 @@ impl ValueKind<Value> { } } +impl<V> ValueKind<V> { + #[allow(dead_code)] + pub(crate) fn map_ref_with_special_handling_of_binders<'a, V2>( + &'a self, + mut map_val: impl FnMut(&'a V) -> V2, + mut map_under_binder: impl FnMut(&'a AlphaLabel, &'a V) -> V2, + ) -> ValueKind<V2> { + use crate::semantics::visitor; + use crate::syntax::trivial_result; + use visitor::ValueKindVisitor; + trivial_result( + visitor::TraverseRefWithBindersVisitor { + visit_val: |x| Ok(map_val(x)), + visit_under_binder: |l, x| Ok(map_under_binder(l, x)), + } + .visit(self), + ) + } +} + +// #[allow(dead_code)] +// fn equiv(x: &Value, y:&Value) -> bool { +// let map = |kind| { + +// }; +// map(x) == map(y) +// } + impl Shift for Value { fn shift(&self, delta: isize, var: &AlphaVar) -> Option<Self> { Some(Value(self.0.shift(delta, var)?)) |