From 38f6aef9d0bca95d36fc53eec1fb5ddd184c8a92 Mon Sep 17 00:00:00 2001 From: timofey Date: Thu, 27 Apr 2023 07:48:07 +0000 Subject: [PATCH] Iterative -> AIterative --- src/func.rs | 4 ++-- src/func/classes/composition.rs | 8 ++++---- src/func/classes/future.rs | 2 +- src/func/classes/lazy.rs | 2 +- src/func/classes/option.rs | 2 +- src/func/classes/result.rs | 2 +- src/func/classes/solo.rs | 2 +- src/func/classes/stackless.rs | 2 +- src/func/controlflow.rs | 16 +++++++++------- src/std/tracing.rs | 2 +- src/testing/counted.rs | 2 +- 11 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/func.rs b/src/func.rs index 47ea22f..71dbf72 100644 --- a/src/func.rs +++ b/src/func.rs @@ -21,8 +21,8 @@ pub use std::ops::ControlFlow; pub use radn_derive::{CovariantFunctor, SharedFunctor}; +pub use self::controlflow::{AIterative, AIterativeWrapped}; use self::controlflow::{BindableMut, ControlFlowClass}; -pub use self::controlflow::{Iterative, IterativeWrapped}; /// Part of Haskell's `Functor f` responsible for having `f a`. /// @@ -196,7 +196,7 @@ pub trait Monad: Applicative { /// On practice, you generally shouldn't be using [`Monad::bind`]/[`Pure::pure`]/[`Functor::fmap`] here. fn iibind<'a, A: 'a, B: 'a>( a: A, - f: impl Iterative<'a, T = Self, A = A, B = B>, + f: impl AIterative<'a, T = Self, A = A, B = B>, ) -> Self::F<'a, B> where Self: 'a; diff --git a/src/func/classes/composition.rs b/src/func/classes/composition.rs index 00a26d0..38e4854 100644 --- a/src/func/classes/composition.rs +++ b/src/func/classes/composition.rs @@ -114,7 +114,7 @@ impl Monad for CompositionClass { fn iibind<'a, A: 'a, B: 'a>( a: A, - f: impl Iterative<'a, T = Self, A = A, B = B>, + f: impl AIterative<'a, T = Self, A = A, B = B>, ) -> Self::F<'a, B> where Self: 'a, @@ -137,14 +137,14 @@ impl< 'a, U: 'a + Monad, V: 'a + Monad + LocalFunctor, - F: Iterative<'a, T = CompositionClass>, - > Iterative<'a> for ComposedBindable + F: AIterative<'a, T = CompositionClass>, + > AIterative<'a> for ComposedBindable { type A = F::A; type B = ::F<'a, F::B>; type T = U; - fn iterate(self, a: Self::A) -> IterativeWrapped<'a, Self> { + fn iterate(self, a: Self::A) -> AIterativeWrapped<'a, Self> { let fstate = self.0.iterate(a); U::fmap( |ustate| match V::unstuff(ustate) { diff --git a/src/func/classes/future.rs b/src/func/classes/future.rs index d33baa8..e3d94b6 100644 --- a/src/func/classes/future.rs +++ b/src/func/classes/future.rs @@ -106,7 +106,7 @@ impl Monad for FutureClass { fn iibind<'a, A: 'a, B: 'a>( mut a: A, - mut f: impl Iterative<'a, T = Self, A = A, B = B>, + mut f: impl AIterative<'a, T = Self, A = A, B = B>, ) -> Self::F<'a, B> where Self: 'a, diff --git a/src/func/classes/lazy.rs b/src/func/classes/lazy.rs index 83700d1..3ea1f27 100644 --- a/src/func/classes/lazy.rs +++ b/src/func/classes/lazy.rs @@ -105,7 +105,7 @@ impl Monad for LazyClass { fn iibind<'a, A: 'a, B: 'a>( mut a: A, - mut f: impl Iterative<'a, T = Self, A = A, B = B>, + mut f: impl AIterative<'a, T = Self, A = A, B = B>, ) -> Self::F<'a, B> where Self: 'a, diff --git a/src/func/classes/option.rs b/src/func/classes/option.rs index 232efd0..005dc69 100644 --- a/src/func/classes/option.rs +++ b/src/func/classes/option.rs @@ -109,7 +109,7 @@ impl Monad for OptionClass { fn iibind<'a, A: 'a, B: 'a>( mut a: A, - mut f: impl Iterative<'a, T = Self, A = A, B = B>, + mut f: impl AIterative<'a, T = Self, A = A, B = B>, ) -> Self::F<'a, B> where Self: 'a, diff --git a/src/func/classes/result.rs b/src/func/classes/result.rs index 7957831..0ec3aa5 100644 --- a/src/func/classes/result.rs +++ b/src/func/classes/result.rs @@ -130,7 +130,7 @@ impl Monad for ResultClass { fn iibind<'a, A: 'a, B: 'a>( mut a: A, - mut f: impl Iterative<'a, T = Self, A = A, B = B>, + mut f: impl AIterative<'a, T = Self, A = A, B = B>, ) -> Self::F<'a, B> where Self: 'a, diff --git a/src/func/classes/solo.rs b/src/func/classes/solo.rs index 855ccea..0269846 100644 --- a/src/func/classes/solo.rs +++ b/src/func/classes/solo.rs @@ -97,7 +97,7 @@ impl Monad for SoloClass { fn iibind<'a, A: 'a, B: 'a>( mut a: A, - mut f: impl Iterative<'a, T = Self, A = A, B = B>, + mut f: impl AIterative<'a, T = Self, A = A, B = B>, ) -> Self::F<'a, B> where Self: 'a, diff --git a/src/func/classes/stackless.rs b/src/func/classes/stackless.rs index 244a27b..5ec498c 100644 --- a/src/func/classes/stackless.rs +++ b/src/func/classes/stackless.rs @@ -241,7 +241,7 @@ impl Monad for StacklessClass { fn iibind<'a, A: 'a, B: 'a>( a: A, - f: impl Iterative<'a, T = Self, A = A, B = B>, + f: impl AIterative<'a, T = Self, A = A, B = B>, ) -> Self::F<'a, B> where Self: 'a, diff --git a/src/func/controlflow.rs b/src/func/controlflow.rs index a54b26a..5df063a 100644 --- a/src/func/controlflow.rs +++ b/src/func/controlflow.rs @@ -31,14 +31,16 @@ impl Pure for ControlFlowClass { } } -/// Next [Iterative] state, wrapped. -pub type IterativeWrapped<'a, G> = <>::T as WeakFunctor>::F< +/// Next [AIterative] state, wrapped. +pub type AIterativeWrapped<'a, G> = <>::T as WeakFunctor>::F< 'a, - ControlFlow<>::B, (>::A, G)>, + ControlFlow<>::B, (>::A, G)>, >; /// Value passed to [`Monad::iibind`]. -pub trait Iterative<'a>: 'a + Sized { +/// `A` prefix meaning "with an **a**rgument" given current implementation +/// relying on the argument getting passed around. +pub trait AIterative<'a>: 'a + Sized { /// [`ControlFlow::Continue`]. type A: 'a; /// [`ControlFlow::Break`]. @@ -46,7 +48,7 @@ pub trait Iterative<'a>: 'a + Sized { /// Corresponding [`WeakFunctor`]. type T: 'a + ?Sized + WeakFunctor; /// Get next state. - fn iterate(self, a: Self::A) -> IterativeWrapped<'a, Self>; + fn iterate(self, a: Self::A) -> AIterativeWrapped<'a, Self>; } pub struct BindableMut(F, PhantomData, PhantomData, PhantomData); @@ -70,13 +72,13 @@ impl< A: 'a, B: 'a, F: 'a + FnMut(A) -> T::F<'a, ControlFlow>, - > Iterative<'a> for BindableMut + > AIterative<'a> for BindableMut { type A = A; type B = B; type T = T; - fn iterate(mut self, a: Self::A) -> IterativeWrapped<'a, Self> { + fn iterate(mut self, a: Self::A) -> AIterativeWrapped<'a, Self> { let fa = self.0(a); T::fmap( move |state| match state { diff --git a/src/std/tracing.rs b/src/std/tracing.rs index 18a1f29..d3912ea 100644 --- a/src/std/tracing.rs +++ b/src/std/tracing.rs @@ -184,7 +184,7 @@ impl Monad for TracedClass { fn iibind<'a, A: 'a, B: 'a>( mut a: A, - mut f: impl Iterative<'a, T = Self, A = A, B = B>, + mut f: impl AIterative<'a, T = Self, A = A, B = B>, ) -> Self::F<'a, B> where Self: 'a, diff --git a/src/testing/counted.rs b/src/testing/counted.rs index d7d0b5d..1ccd60f 100644 --- a/src/testing/counted.rs +++ b/src/testing/counted.rs @@ -166,7 +166,7 @@ impl Monad for CountedClass { fn iibind<'a, A: 'a, B: 'a>( mut a: A, - mut f: impl Iterative<'a, T = Self, A = A, B = B>, + mut f: impl AIterative<'a, T = Self, A = A, B = B>, ) -> Self::F<'a, B> where Self: 'a,