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<U: Monad, V: Monad + LocalFunctor> Monad for CompositionClass<U, V> {
 
     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<U, V>>,
-    > Iterative<'a> for ComposedBindable<F>
+        F: AIterative<'a, T = CompositionClass<U, V>>,
+    > AIterative<'a> for ComposedBindable<F>
 {
     type A = F::A;
     type B = <V as WeakFunctor>::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<E> Monad for ResultClass<E> {
 
     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<C> Pure for ControlFlowClass<C> {
     }
 }
 
-/// Next [Iterative] state, wrapped.
-pub type IterativeWrapped<'a, G> = <<G as Iterative<'a>>::T as WeakFunctor>::F<
+/// Next [AIterative] state, wrapped.
+pub type AIterativeWrapped<'a, G> = <<G as AIterative<'a>>::T as WeakFunctor>::F<
     'a,
-    ControlFlow<<G as Iterative<'a>>::B, (<G as Iterative<'a>>::A, G)>,
+    ControlFlow<<G as AIterative<'a>>::B, (<G as AIterative<'a>>::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<T: ?Sized, A, B, F>(F, PhantomData<A>, PhantomData<B>, PhantomData<T>);
@@ -70,13 +72,13 @@ impl<
         A: 'a,
         B: 'a,
         F: 'a + FnMut(A) -> T::F<'a, ControlFlow<B, A>>,
-    > Iterative<'a> for BindableMut<T, A, B, F>
+    > AIterative<'a> for BindableMut<T, A, B, F>
 {
     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,