Diffstat (limited to 'src/protocol/visitor/request_hint.rs')
-rw-r--r--src/protocol/visitor/request_hint.rs20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/protocol/visitor/request_hint.rs b/src/protocol/visitor/request_hint.rs
index f78dd23..ea22b7a 100644
--- a/src/protocol/visitor/request_hint.rs
+++ b/src/protocol/visitor/request_hint.rs
@@ -1,7 +1,5 @@
use effectful::{
- effective::Effective,
- environment::{DynBind, Environment, NativeForm},
- SendSync,
+ effective::{Canonical, Effective}, environment::Environment, DynBind, SendSync
};
use crate::{
@@ -18,10 +16,10 @@ pub trait RequestHint<'ctx, E: Environment>: DynBind<E> {
///
/// `walker` is what the visitor (`self`) will call to give a hint using the
/// [`Hint`][crate::builtins::walker::Hint] protocol.
- fn request_hint<'this: 'e, 'walker: 'e, 'e>(
+ fn request_hint<'this: 'e, 'walker: 'e, 'lt: 'e, 'e>(
&'this mut self,
- walker: DynWalker<'walker, 'ctx, E>,
- ) -> NativeForm<'e, VisitResult, E>
+ walker: DynWalker<'walker, 'lt, 'ctx, E>,
+ ) -> Canonical<'e, VisitResult, E>
where
'ctx: 'this + 'walker;
}
@@ -51,12 +49,12 @@ const _: () = {
/// If [`Flow::Done`] is returned then the visitor doesn't need any more information and the walker
/// should stop walking.
/// If [`Flow::Break`] is returned then there was an error and the walker should stop walking.
-pub fn request_hint<'ctx: 'visitor + 'walker, 'visitor: 'e, 'walker: 'e, 'e, E: Environment>(
- visitor: DynVisitor<'visitor, 'ctx, E>,
- walker: DynWalker<'walker, 'ctx, E>,
-) -> NativeForm<'e, VisitResult<DynWalker<'walker, 'ctx, E>>, E> {
+pub fn request_hint<'ctx: 'visitor + 'walker, 'visitor: 'e, 'lt: 'e, 'lt2: 'e, 'walker: 'e, 'e, E: Environment>(
+ visitor: DynVisitor<'visitor, 'lt, 'ctx, E>,
+ walker: DynWalker<'walker, 'lt2, 'ctx, E>,
+) -> Canonical<'e, VisitResult<DynWalker<'walker, 'lt2, 'ctx, E>>, E> {
E::value((visitor, walker))
- .update((), |_, (visitor, walker)| {
+ .update_map((), |_, (visitor, walker)| {
if let Some(object) = visitor
.0
.cast_mut()