Diffstat (limited to 'src/protocol/visitor/request_hint.rs')
| -rw-r--r-- | src/protocol/visitor/request_hint.rs | 20 |
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() |