summaryrefslogtreecommitdiff
path: root/dhall_core/src/core.rs
diff options
context:
space:
mode:
authorNadrieril2019-04-14 15:45:43 +0200
committerNadrieril2019-04-14 15:45:43 +0200
commita72e00dc9193f82f93459a493d4f3167f9b2f6f1 (patch)
tree9776a610bba8620b0f0c8cb357c8fbd6f7fd863d /dhall_core/src/core.rs
parent1fc40dc0a16a52218b69734f2540f0b65f5b8614 (diff)
Improve visitor trait hierarchy
Diffstat (limited to 'dhall_core/src/core.rs')
-rw-r--r--dhall_core/src/core.rs21
1 files changed, 13 insertions, 8 deletions
diff --git a/dhall_core/src/core.rs b/dhall_core/src/core.rs
index f836294..b3f6b9c 100644
--- a/dhall_core/src/core.rs
+++ b/dhall_core/src/core.rs
@@ -198,6 +198,15 @@ pub enum ExprF<SubExpr, Label, Note, Embed> {
Embed(Embed),
}
+impl<SE, L, N, E> ExprF<SE, L, N, E> {
+ pub fn visit<'a, V, Return>(&'a self, v: V) -> Return
+ where
+ V: visitor::GenericVisitor<&'a ExprF<SE, L, N, E>, Return>,
+ {
+ v.visit(self)
+ }
+}
+
impl<S, A> Expr<S, A> {
pub fn map_shallow<T, B, F1, F2, F3, F4>(
&self,
@@ -270,9 +279,7 @@ impl<N: Clone, E> Expr<N, E> {
&self,
f: impl FnMut(&E) -> SubExpr<N, E2>,
) -> SubExpr<N, E2> {
- rc(trivial_result(
- self.visit(&mut visitor::SquashEmbedVisitor(f)),
- ))
+ rc(self.visit(&mut visitor::SquashEmbedVisitor(f)))
}
}
@@ -463,15 +470,13 @@ impl<E: Clone> SubExpr<X, E> {
impl<E: Clone> Expr<X, E> {
pub fn note_absurd<N>(&self) -> Expr<N, E> {
- trivial_result(self.visit(&mut visitor::NoteAbsurdVisitor))
+ self.visit(&mut visitor::NoteAbsurdVisitor)
}
}
impl<N, E: Clone> SubExpr<N, E> {
pub fn unnote(&self) -> SubExpr<X, E> {
- rc(trivial_result(
- self.as_ref().visit(&mut visitor::UnNoteVisitor),
- ))
+ rc(self.as_ref().visit(&mut visitor::UnNoteVisitor))
}
}
@@ -481,7 +486,7 @@ impl<N: Clone> Expr<N, X> {
self.embed_absurd()
}
pub fn embed_absurd<T>(&self) -> Expr<N, T> {
- trivial_result(self.visit(&mut visitor::EmbedAbsurdVisitor))
+ self.visit(&mut visitor::EmbedAbsurdVisitor)
}
}