summaryrefslogtreecommitdiff
path: root/dhall/src/semantics/core/value.rs
diff options
context:
space:
mode:
authorNadrieril2019-12-27 15:15:08 +0000
committerNadrieril2020-01-17 10:06:00 +0000
commit8e2da26650e202f9ccb1531fc8a88cfd89e54b6d (patch)
tree142391d96492be8268cbd32946699053cac076d7 /dhall/src/semantics/core/value.rs
parent8edbeadbd0dc06a75ffb8bf3b0a54a62e3acc5fc (diff)
Implement traverse_ref for ValueKind
Diffstat (limited to 'dhall/src/semantics/core/value.rs')
-rw-r--r--dhall/src/semantics/core/value.rs28
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)?))