Diffstat (limited to 'src/protocol/visitor/sequence.rs')
| -rw-r--r-- | src/protocol/visitor/sequence.rs | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/src/protocol/visitor/sequence.rs b/src/protocol/visitor/sequence.rs index 2a5f9f3..46c8e71 100644 --- a/src/protocol/visitor/sequence.rs +++ b/src/protocol/visitor/sequence.rs @@ -1,45 +1,42 @@ use core::ops::ControlFlow; use crate::{ - effect::{any_t, Effect, SyncEffect, Yield}, - hkt::hkt, + effect::{Effect, Future}, + higher_ranked_type, + hkt::AnySend, nameable, - protocol::{walker::HintMeta, Visitor}, + protocol::{walker::hint::HintMeta, Visitor}, }; -pub trait Sequence<'ctx, E: Effect<'ctx, ControlFlow<(), ()>>> { +pub trait Sequence<'ctx, E: Effect<'ctx>> { fn visit<'a>( &'a mut self, scope: &'a mut dyn SequenceScope<'ctx, E>, - ) -> Yield<'a, 'ctx, ControlFlow<(), ()>, E> - where - 'ctx: 'a; + ) -> Future<'a, 'ctx, ControlFlow<(), ()>, E>; } nameable! { pub struct Name['a, 'ctx, E]; impl [E] for dyn Sequence<'ctx, E> + 'a where { - E: Effect<'ctx, ControlFlow<(), ()>> + Effect<'ctx, ControlFlow<(), Status>>, + E: Effect<'ctx>, 'ctx: 'a } impl [E] where dyn Sequence<'ctx, E> + 'a { - E: Effect<'ctx, ControlFlow<(), ()>> + Effect<'ctx, ControlFlow<(), Status>>, + E: Effect<'ctx>, 'ctx: 'a } } pub trait SequenceScope<'ctx, E> where - E: Effect<'ctx, ControlFlow<(), Status>>, + E: Effect<'ctx>, { fn next<'a>( &'a mut self, - visitor: Visitor<'a, 'ctx, E>, - ) -> Yield<'a, 'ctx, ControlFlow<(), Status>, E> - where - 'ctx: 'a; + visitor: Visitor<'a, 'ctx>, + ) -> Future<'a, 'ctx, ControlFlow<(), Status>, E>; } #[derive(PartialEq, Eq, PartialOrd, Ord, Copy, Clone, Debug)] @@ -48,7 +45,9 @@ pub enum Status { Continue, } -hkt!((any_t): for<'a, 'ctx> pub KnownHkt => Known); +higher_ranked_type! { + pub type KnownHkt['ctx]: (AnySend) = for<'lt> Known +} #[derive(Default)] pub struct Known { @@ -59,9 +58,7 @@ pub struct Hint { pub len: (usize, Option<usize>), } -impl<'a, 'ctx: 'a, E: Effect<'ctx, ControlFlow<(), ()>>> HintMeta<'ctx> - for dyn Sequence<'ctx, E> + '_ -{ +impl<'a, 'ctx: 'a, E: Effect<'ctx>> HintMeta<'ctx> for dyn Sequence<'ctx, E> + '_ { type Known = KnownHkt<'ctx>; type Hint = Hint; |