From d9c8cff1dbf851d32218fc919da22ef880d25b78 Mon Sep 17 00:00:00 2001 From: timofey Date: Tue, 23 May 2023 13:28:32 +0000 Subject: [PATCH] rename classes to instances --- book-monads | 2 +- src/flow/traversible/unbalanced.rs | 16 ++++++---- src/func.rs | 22 +++++++------ src/func/controlflow.rs | 8 ++--- src/func/{classes.rs => instances.rs} | 8 ++--- .../{classes => instances}/composition.rs | 30 ++++++++--------- src/func/{classes => instances}/effect.rs | 22 ++++++------- src/func/{classes => instances}/future.rs | 22 ++++++------- src/func/{classes => instances}/lazy.rs | 24 +++++++------- src/func/{classes => instances}/option.rs | 28 ++++++++-------- src/func/{classes => instances}/overload.rs | 32 +++++++++---------- src/func/{classes => instances}/result.rs | 32 +++++++++---------- src/func/{classes => instances}/solo.rs | 24 +++++++------- src/func/{classes => instances}/stackless.rs | 22 ++++++------- src/func/{classes => instances}/tryfuture.rs | 28 ++++++++-------- src/rstd/tracing.rs | 6 ++-- src/rstd/tracing/traceable.rs | 12 ++++--- src/rstd/tracing/traced.rs | 2 +- src/testing.rs | 4 +-- src/testing/counted.rs | 12 +++---- src/testing/traced.rs | 4 +-- 21 files changed, 184 insertions(+), 176 deletions(-) rename src/func/{classes.rs => instances.rs} (67%) rename src/func/{classes => instances}/composition.rs (90%) rename src/func/{classes => instances}/effect.rs (87%) rename src/func/{classes => instances}/future.rs (89%) rename src/func/{classes => instances}/lazy.rs (86%) rename src/func/{classes => instances}/option.rs (87%) rename src/func/{classes => instances}/overload.rs (89%) rename src/func/{classes => instances}/result.rs (89%) rename src/func/{classes => instances}/solo.rs (84%) rename src/func/{classes => instances}/stackless.rs (95%) rename src/func/{classes => instances}/tryfuture.rs (89%) diff --git a/book-monads b/book-monads index 80aa72c..f1dd33d 160000 --- a/book-monads +++ b/book-monads @@ -1 +1 @@ -Subproject commit 80aa72c60ecd0ac605041d22df2ea6a66178c5be +Subproject commit f1dd33d61f7d1ce9c1d428ff0d75fb3efb2bb340 diff --git a/src/flow/traversible/unbalanced.rs b/src/flow/traversible/unbalanced.rs index a42c44f..691a7d5 100644 --- a/src/flow/traversible/unbalanced.rs +++ b/src/flow/traversible/unbalanced.rs @@ -55,13 +55,15 @@ where } } -impl<'a, A: 'a + Display> Display for UnbalancedReference<'a, classes::solo::SoloClass, A> { +impl<'a, A: 'a + Display> Display for UnbalancedReference<'a, instances::solo::SoloInstance, A> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.write_fmt(format_args!("{}", self.0())) } } -impl<'a, A: 'a + Display> Display for UnbalancedReference<'a, classes::result::ResultClass<()>, A> { +impl<'a, A: 'a + Display> Display + for UnbalancedReference<'a, instances::result::ResultInstance<()>, A> +{ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self.0() { Ok(node) => f.write_fmt(format_args!("{}", node)), @@ -179,7 +181,7 @@ mod tests { #[test] fn test_simple_slices() { - let ctr: Rc, _>> = + let ctr: Rc, _>> = UnbalancedConstructor::rc(Box::new(|node| Box::new(move || Ok(node.clone())))); let mut rng = rand::thread_rng(); let t_set = ctr.from_slice(&mut rng, &[0]); @@ -212,7 +214,7 @@ mod tests { #[ignore] #[test] fn test_random_slices() { - let ctr: Rc, _>> = + let ctr: Rc, _>> = UnbalancedConstructor::rc(Box::new(|node| Box::new(move || Ok(node.clone())))); let mut rng = rand::thread_rng(); for _ in 0..1000 { @@ -254,8 +256,10 @@ mod tests { } } - type TracedMonad = - classes::composition::CompositionClass>; + type TracedMonad = instances::composition::CompositionInstance< + TracedInstance, + instances::result::ResultInstance<()>, + >; #[ignore] #[test] diff --git a/src/func.rs b/src/func.rs index 4769470..0475f85 100644 --- a/src/func.rs +++ b/src/func.rs @@ -8,11 +8,11 @@ //! * mod applicative_select; -pub mod classes; pub mod clone_func; mod controlflow; pub mod copy_func; pub mod derivations; +pub mod instances; #[cfg(test)] pub mod test_suite; #[cfg(test)] @@ -23,8 +23,10 @@ pub use std::ops::ControlFlow; pub use radn_derive::{CovariantFunctor, SharedFunctor}; pub use self::applicative_select::{ApplicativeSelect, Selected}; -use self::controlflow::{BindableMut, ControlFlowClass}; +use self::controlflow::{BindableMut, ControlFlowInstance}; pub use self::controlflow::{Iterative, IterativeWrapped}; +#[cfg(doc)] +use self::instances::stackless::StacklessInstance; /// Part of Haskell's `Functor f` responsible for having `f a`. /// @@ -42,13 +44,13 @@ pub trait WeakFunctor { /// ```compile_fail /// use radn_rs::func::*; /// -/// struct VecClass; +/// struct VecInstance; /// -/// impl WeakFunctor for VecClass { +/// impl WeakFunctor for VecInstance { /// type F<'a, A> = Vec; /// } /// -/// impl Functor for VecClass { +/// impl Functor for VecInstance { /// fn fmap<'a, A: 'a, B: 'a>(f: impl 'a + FnOnce(A) -> B, fa: Self::F<'a, A>) -> Self::F<'a, B> { /// fa.into_iter().map(f).collect() /// } @@ -61,13 +63,13 @@ pub trait WeakFunctor { /// ``` /// use radn_rs::func::clone_func::*; /// -/// struct VecClass; +/// struct VecInstance; /// -/// impl CloneWeakFunctor for VecClass { +/// impl CloneWeakFunctor for VecInstance { /// type ClF<'a, A: Clone> = Vec; /// } /// -/// impl CloneFunctor for VecClass { +/// impl CloneFunctor for VecInstance { /// fn clone_fmap<'a, A: 'a + Clone, B: 'a + Clone>( /// f: impl 'a + Fn(A) -> B, /// fa: Self::ClF<'a, A>, @@ -182,7 +184,7 @@ pub trait Monad: Applicative { /// Included for optimisation and clarity. /// Generally, [`Monad::bind`] should be enough implement it. - /// See [`classes::stackless::StacklessClass::iterate`] for a generic, though less-than ideal, blanket implementation. + /// See [`StacklessInstance::iterate`] for a generic, though less-than ideal, blanket implementation. /// On practice, you generally shouldn't be using [`Monad::bind`]/[`Pure::pure`]/[`Functor::fmap`] here. fn iterate<'a, B: 'a>(f: impl Iterative<'a, T = Self, B = B>) -> Self::F<'a, B> where @@ -256,7 +258,7 @@ pub trait LocalFunctor: WeakFunctor { where Self: 'a, { - Self::stuff::<_, ControlFlowClass>(state) + Self::stuff::<_, ControlFlowInstance>(state) } /// Stuff wrapped result into another functor. diff --git a/src/func/controlflow.rs b/src/func/controlflow.rs index e3752d1..0a162ea 100644 --- a/src/func/controlflow.rs +++ b/src/func/controlflow.rs @@ -2,15 +2,15 @@ use std::marker::PhantomData; use super::*; -pub struct ControlFlowClass(ControlFlow<(), C>); +pub struct ControlFlowInstance(ControlFlow<(), C>); -impl WeakFunctor for ControlFlowClass { +impl WeakFunctor for ControlFlowInstance { type F<'a, A: 'a> = ControlFlow where Self: 'a; } -impl Functor for ControlFlowClass { +impl Functor for ControlFlowInstance { fn fmap<'a, A: 'a, B: 'a>(f: impl 'a + FnOnce(A) -> B, fa: Self::F<'a, A>) -> Self::F<'a, B> where Self: 'a, @@ -22,7 +22,7 @@ impl Functor for ControlFlowClass { } } -impl Pure for ControlFlowClass { +impl Pure for ControlFlowInstance { fn pure<'a, A: 'a>(a: A) -> Self::F<'a, A> where Self: 'a, diff --git a/src/func/classes.rs b/src/func/instances.rs similarity index 67% rename from src/func/classes.rs rename to src/func/instances.rs index 0094bd6..02ae552 100644 --- a/src/func/classes.rs +++ b/src/func/instances.rs @@ -1,6 +1,6 @@ -//! Implementation of some basic classes (in Haskell's meaning of a class). +//! Implementation of some basic instances (in Haskell's meaning of a instances). //! -//! To get an understanding of what classes are about, see [`option`]. +//! To get an understanding of what instances are about, see [`option`]. //! //! For [`MonadFail`] examples, see [`result`][^research]. //! @@ -12,9 +12,9 @@ //! //! For combining monads, see [`composition`][^research]. //! -//! [^production]: classes expected to be used in production. +//! [^production]: instances expected to be used in production. //! -//! [^research]: classes used for research purposes to enhance the abstract interfaces. +//! [^research]: instances used for research purposes to enhance the abstract interfaces. #[cfg(doc)] use crate::func::*; diff --git a/src/func/classes/composition.rs b/src/func/instances/composition.rs similarity index 90% rename from src/func/classes/composition.rs rename to src/func/instances/composition.rs index c99549e..32b9f3f 100644 --- a/src/func/classes/composition.rs +++ b/src/func/instances/composition.rs @@ -1,12 +1,12 @@ use crate::func::*; -pub struct CompositionClass(U, V); +pub struct CompositionInstance(U, V); -impl WeakFunctor for CompositionClass { +impl WeakFunctor for CompositionInstance { type F<'a, A: 'a> = U::F<'a, V::F<'a, A>> where Self: 'a; } -impl Functor for CompositionClass { +impl Functor for CompositionInstance { fn fmap<'a, A: 'a, B: 'a>(f: impl 'a + FnOnce(A) -> B, fa: Self::F<'a, A>) -> Self::F<'a, B> where Self: 'a, @@ -29,7 +29,7 @@ impl Functor for CompositionClass { } } -impl Pure for CompositionClass { +impl Pure for CompositionInstance { fn pure<'a, A: 'a>(a: A) -> Self::F<'a, A> where Self: 'a, @@ -38,7 +38,7 @@ impl Pure for CompositionClass { } } -impl ApplicativeSeq for CompositionClass { +impl ApplicativeSeq for CompositionInstance { fn seq<'a, A: 'a, B: 'a>( ff: Self::F<'a, impl 'a + FnOnce(A) -> B>, fa: Self::F<'a, A>, @@ -50,7 +50,7 @@ impl ApplicativeSeq for CompositionClass ApplicativeLA2 for CompositionClass { +impl ApplicativeLA2 for CompositionInstance { fn la2<'a, A: 'a, B: 'a, C: 'a>( f: impl 'a + FnOnce(A, B) -> C, fa: Self::F<'a, A>, @@ -63,7 +63,7 @@ impl ApplicativeLA2 for CompositionClass ApplicativeTuple for CompositionClass { +impl ApplicativeTuple for CompositionInstance { fn tuple<'a, A: 'a, B: 'a>(fab: (Self::F<'a, A>, Self::F<'a, B>)) -> Self::F<'a, (A, B)> where Self: 'a, @@ -72,7 +72,7 @@ impl ApplicativeTuple for CompositionC } } -impl ApplicativeSelect for CompositionClass { +impl ApplicativeSelect for CompositionInstance { fn select<'a, A: 'a, B: 'a, C: 'a>( f: impl 'a + FnOnce(Selected<'a, A, B, Self>) -> C, fa: Self::F<'a, A>, @@ -92,7 +92,7 @@ impl ApplicativeSelect for CompositionClass Applicative for CompositionClass { +impl Applicative for CompositionInstance { fn discard_first<'a, A: 'a, B: 'a>(fa: Self::F<'a, A>, fb: Self::F<'a, B>) -> Self::F<'a, B> where Self: 'a, @@ -108,7 +108,7 @@ impl Applicative for CompositionClass { } } -impl Monad for CompositionClass { +impl Monad for CompositionInstance { fn bind<'a, A: 'a, B: 'a>( fa: Self::F<'a, A>, f: impl 'a + FnOnce(A) -> Self::F<'a, B>, @@ -141,7 +141,7 @@ impl< 'a, U: 'a + Monad, V: 'a + Monad + LocalFunctor, - F: Iterative<'a, T = CompositionClass>, + F: Iterative<'a, T = CompositionInstance>, > Iterative<'a> for ComposedIterative { type B = ::F<'a, F::B>; @@ -159,7 +159,7 @@ impl< } } -impl + LocalFunctor> Fail for CompositionClass { +impl + LocalFunctor> Fail for CompositionInstance { fn fail<'a, A: 'a>(e: E) -> Self::F<'a, A> where Self: 'a, @@ -169,7 +169,7 @@ impl + LocalFunctor> Fail for CompositionClass } } -impl LocalFunctor for CompositionClass { +impl LocalFunctor for CompositionInstance { fn unstuff<'a, A: 'a, B: 'a>( state: Self::F<'a, ControlFlow>, ) -> ControlFlow, A> @@ -187,7 +187,7 @@ impl LocalFunctor for CompositionCla } } -impl SharedFunctor for CompositionClass { +impl SharedFunctor for CompositionInstance { type Shared<'a, A: 'a + Clone> = U::Shared<'a, V::Shared<'a, A>> where Self: 'a; @@ -208,7 +208,7 @@ impl SharedFunctor for Composition } impl CovariantFunctor - for CompositionClass + for CompositionInstance { fn variate<'a: 'b, 'b, A: 'a>(fa: Self::F<'a, A>) -> Self::F<'b, A> where diff --git a/src/func/classes/effect.rs b/src/func/instances/effect.rs similarity index 87% rename from src/func/classes/effect.rs rename to src/func/instances/effect.rs index 2a3c0bc..37823b7 100644 --- a/src/func/classes/effect.rs +++ b/src/func/instances/effect.rs @@ -24,15 +24,15 @@ impl WithEffect { } #[derive(SharedFunctor, CovariantFunctor)] -pub struct EffectClass(E); +pub struct EffectInstance(E); -impl WeakFunctor for EffectClass { +impl WeakFunctor for EffectInstance { type F<'a, A: 'a> = WithEffect where Self: 'a; } -impl Functor for EffectClass { +impl Functor for EffectInstance { fn fmap<'a, A: 'a, B: 'a>(f: impl 'a + FnOnce(A) -> B, fa: Self::F<'a, A>) -> Self::F<'a, B> where Self: 'a, @@ -55,7 +55,7 @@ impl Functor for EffectClass { } } -impl Pure for EffectClass { +impl Pure for EffectInstance { fn pure<'a, A: 'a>(a: A) -> Self::F<'a, A> where Self: 'a, @@ -67,7 +67,7 @@ impl Pure for EffectClass { } } -impl ApplicativeSeq for EffectClass { +impl ApplicativeSeq for EffectInstance { fn seq<'a, A: 'a, B: 'a>( ff: Self::F<'a, impl 'a + FnOnce(A) -> B>, fa: Self::F<'a, A>, @@ -82,7 +82,7 @@ impl ApplicativeSeq for EffectClass { } } -impl ApplicativeLA2 for EffectClass { +impl ApplicativeLA2 for EffectInstance { fn la2<'a, A: 'a, B: 'a, C: 'a>( f: impl 'a + FnOnce(A, B) -> C, fa: Self::F<'a, A>, @@ -98,7 +98,7 @@ impl ApplicativeLA2 for EffectClass { } } -impl ApplicativeTuple for EffectClass { +impl ApplicativeTuple for EffectInstance { fn tuple<'a, A: 'a, B: 'a>((fa, fb): (Self::F<'a, A>, Self::F<'a, B>)) -> Self::F<'a, (A, B)> where Self: 'a, @@ -110,9 +110,9 @@ impl ApplicativeTuple for EffectClass { } } -impl ApplicativeSelect for EffectClass {} +impl ApplicativeSelect for EffectInstance {} -impl Applicative for EffectClass { +impl Applicative for EffectInstance { fn discard_first<'a, A: 'a, B: 'a>(fa: Self::F<'a, A>, fb: Self::F<'a, B>) -> Self::F<'a, B> where Self: 'a, @@ -136,7 +136,7 @@ impl Applicative for EffectClass { } } -impl Monad for EffectClass { +impl Monad for EffectInstance { fn bind<'a, A: 'a, B: 'a>( fa: Self::F<'a, A>, f: impl 'a + FnOnce(A) -> Self::F<'a, B>, @@ -171,7 +171,7 @@ impl Monad for EffectClass { } } -impl LocalFunctor for EffectClass { +impl LocalFunctor for EffectInstance { fn stuff<'a, A: 'a, T: 'a + Pure>(fa: Self::F<'a, T::F<'a, A>>) -> T::F<'a, Self::F<'a, A>> where Self: 'a, diff --git a/src/func/classes/future.rs b/src/func/instances/future.rs similarity index 89% rename from src/func/classes/future.rs rename to src/func/instances/future.rs index c0ecef3..1086a6d 100644 --- a/src/func/classes/future.rs +++ b/src/func/instances/future.rs @@ -13,13 +13,13 @@ use futures::{ use crate::func::*; #[derive(CovariantFunctor)] -pub struct FutureClass; +pub struct FutureInstance; -impl WeakFunctor for FutureClass { +impl WeakFunctor for FutureInstance { type F<'a, A: 'a> = Pin>>; } -impl Functor for FutureClass { +impl Functor for FutureInstance { fn fmap<'a, A: 'a, B: 'a>(f: impl 'a + FnOnce(A) -> B, fa: Self::F<'a, A>) -> Self::F<'a, B> { Box::pin(async { f(fa.await) }) } @@ -32,13 +32,13 @@ impl Functor for FutureClass { } } -impl Pure for FutureClass { +impl Pure for FutureInstance { fn pure<'a, A: 'a>(a: A) -> Self::F<'a, A> { Box::pin(async { a }) } } -impl ApplicativeSeq for FutureClass { +impl ApplicativeSeq for FutureInstance { fn seq<'a, A: 'a, B: 'a>( ff: Self::F<'a, impl 'a + FnOnce(A) -> B>, fa: Self::F<'a, A>, @@ -50,7 +50,7 @@ impl ApplicativeSeq for FutureClass { } } -impl ApplicativeLA2 for FutureClass { +impl ApplicativeLA2 for FutureInstance { fn la2<'a, A: 'a, B: 'a, C: 'a>( f: impl 'a + FnOnce(A, B) -> C, fa: Self::F<'a, A>, @@ -63,7 +63,7 @@ impl ApplicativeLA2 for FutureClass { } } -impl ApplicativeTuple for FutureClass { +impl ApplicativeTuple for FutureInstance { fn tuple<'a, A: 'a, B: 'a>((fa, fb): (Self::F<'a, A>, Self::F<'a, B>)) -> Self::F<'a, (A, B)> where Self: 'a, @@ -72,7 +72,7 @@ impl ApplicativeTuple for FutureClass { } } -impl ApplicativeSelect for FutureClass { +impl ApplicativeSelect for FutureInstance { fn select<'a, A: 'a, B: 'a, C: 'a>( f: impl 'a + FnOnce(Selected<'a, A, B, Self>) -> C, fa: Self::F<'a, A>, @@ -90,7 +90,7 @@ impl ApplicativeSelect for FutureClass { } } -impl Applicative for FutureClass { +impl Applicative for FutureInstance { fn discard_first<'a, A: 'a, B: 'a>(fa: Self::F<'a, A>, fb: Self::F<'a, B>) -> Self::F<'a, B> { Box::pin(async { join!(fa, fb).1 }) } @@ -100,7 +100,7 @@ impl Applicative for FutureClass { } } -impl Monad for FutureClass { +impl Monad for FutureInstance { fn bind<'a, A: 'a, B: 'a>( fa: Self::F<'a, A>, f: impl 'a + FnOnce(A) -> Self::F<'a, B>, @@ -127,7 +127,7 @@ impl Monad for FutureClass { } } -impl SharedFunctor for FutureClass { +impl SharedFunctor for FutureInstance { type Shared<'a, A: 'a + Clone> = Shared>>> where Self: 'a; diff --git a/src/func/classes/lazy.rs b/src/func/instances/lazy.rs similarity index 86% rename from src/func/classes/lazy.rs rename to src/func/instances/lazy.rs index 76ddc88..2de51b4 100644 --- a/src/func/classes/lazy.rs +++ b/src/func/instances/lazy.rs @@ -2,7 +2,7 @@ //! Wrapped value is just a box pointing to the constructor function. //! //! Due to semantical laziness, -//! [`LazyClass::replace`] and [`LazyClass::discard_first`]/[`LazyClass::discard_second`] +//! [`LazyInstance::replace`] and [`LazyInstance::discard_first`]/[`LazyInstance::discard_second`] //! actually fully cancel the "unnecessary" computation. //! //! For stackless execution see [`super::stackless`]. @@ -12,13 +12,13 @@ use std::{cell::RefCell, rc::Rc}; use crate::func::*; #[derive(CovariantFunctor)] -pub struct LazyClass; +pub struct LazyInstance; -impl WeakFunctor for LazyClass { +impl WeakFunctor for LazyInstance { type F<'a, A: 'a> = Box A>; } -impl Functor for LazyClass { +impl Functor for LazyInstance { fn fmap<'a, A: 'a, B: 'a>(f: impl 'a + FnOnce(A) -> B, fa: Self::F<'a, A>) -> Self::F<'a, B> { Box::new(|| f(fa())) } @@ -34,13 +34,13 @@ impl Functor for LazyClass { } } -impl Pure for LazyClass { +impl Pure for LazyInstance { fn pure<'a, A: 'a>(a: A) -> Self::F<'a, A> { Box::new(|| a) } } -impl ApplicativeSeq for LazyClass { +impl ApplicativeSeq for LazyInstance { fn seq<'a, A: 'a, B: 'a>( ff: Self::F<'a, impl 'a + FnOnce(A) -> B>, fa: Self::F<'a, A>, @@ -49,7 +49,7 @@ impl ApplicativeSeq for LazyClass { } } -impl ApplicativeLA2 for LazyClass { +impl ApplicativeLA2 for LazyInstance { fn la2<'a, A: 'a, B: 'a, C: 'a>( f: impl 'a + FnOnce(A, B) -> C, fa: Self::F<'a, A>, @@ -59,7 +59,7 @@ impl ApplicativeLA2 for LazyClass { } } -impl ApplicativeTuple for LazyClass { +impl ApplicativeTuple for LazyInstance { fn tuple<'a, A: 'a, B: 'a>((fa, fb): (Self::F<'a, A>, Self::F<'a, B>)) -> Self::F<'a, (A, B)> where Self: 'a, @@ -68,9 +68,9 @@ impl ApplicativeTuple for LazyClass { } } -impl ApplicativeSelect for LazyClass {} +impl ApplicativeSelect for LazyInstance {} -impl Applicative for LazyClass { +impl Applicative for LazyInstance { fn discard_first<'a, A: 'a, B: 'a>(fa: Self::F<'a, A>, fb: Self::F<'a, B>) -> Self::F<'a, B> { drop(fa); fb @@ -82,7 +82,7 @@ impl Applicative for LazyClass { } } -impl Monad for LazyClass { +impl Monad for LazyInstance { fn bind<'a, A: 'a, B: 'a>( fa: Self::F<'a, A>, f: impl 'a + FnOnce(A) -> Self::F<'a, B>, @@ -116,7 +116,7 @@ fn unshare<'a, A: 'a + Clone>(shared: &mut Option A>>) a } -impl SharedFunctor for LazyClass { +impl SharedFunctor for LazyInstance { type Shared<'a, A: 'a + Clone> = Rc A>>>> where Self: 'a; diff --git a/src/func/classes/option.rs b/src/func/instances/option.rs similarity index 87% rename from src/func/classes/option.rs rename to src/func/instances/option.rs index 3ac2df7..f70cf02 100644 --- a/src/func/classes/option.rs +++ b/src/func/instances/option.rs @@ -2,7 +2,7 @@ //! //! If any of the input values are [`None`], you can expect the output to be [`None`] as well. //! That includes -//! [`OptionClass::replace`] and [`OptionClass::discard_first`]/[`OptionClass::discard_second`], +//! [`OptionInstance::replace`] and [`OptionInstance::discard_first`]/[`OptionInstance::discard_second`], //! even if the value of the option would be ignored. //! //! For [`Result`] alternative see [`super::result`] @@ -10,13 +10,13 @@ use crate::func::*; #[derive(SharedFunctor, CovariantFunctor)] -pub struct OptionClass; +pub struct OptionInstance; -impl WeakFunctor for OptionClass { +impl WeakFunctor for OptionInstance { type F<'a, A: 'a> = Option; } -impl Functor for OptionClass { +impl Functor for OptionInstance { fn fmap<'a, A: 'a, B: 'a>(f: impl 'a + FnOnce(A) -> B, fa: Self::F<'a, A>) -> Self::F<'a, B> { fa.map(f) } @@ -38,13 +38,13 @@ impl Functor for OptionClass { } } -impl Pure for OptionClass { +impl Pure for OptionInstance { fn pure<'a, A: 'a>(a: A) -> Self::F<'a, A> { Some(a) } } -impl ApplicativeSeq for OptionClass { +impl ApplicativeSeq for OptionInstance { fn seq<'a, A: 'a, B: 'a>( ff: Self::F<'a, impl 'a + FnOnce(A) -> B>, fa: Self::F<'a, A>, @@ -53,7 +53,7 @@ impl ApplicativeSeq for OptionClass { } } -impl ApplicativeLA2 for OptionClass { +impl ApplicativeLA2 for OptionInstance { fn la2<'a, A: 'a, B: 'a, C: 'a>( f: impl 'a + FnOnce(A, B) -> C, fa: Self::F<'a, A>, @@ -63,7 +63,7 @@ impl ApplicativeLA2 for OptionClass { } } -impl ApplicativeTuple for OptionClass { +impl ApplicativeTuple for OptionInstance { fn tuple<'a, A: 'a, B: 'a>((fa, fb): (Self::F<'a, A>, Self::F<'a, B>)) -> Self::F<'a, (A, B)> where Self: 'a, @@ -72,9 +72,9 @@ impl ApplicativeTuple for OptionClass { } } -impl ApplicativeSelect for OptionClass {} +impl ApplicativeSelect for OptionInstance {} -impl Applicative for OptionClass { +impl Applicative for OptionInstance { fn discard_first<'a, A: 'a, B: 'a>(fa: Self::F<'a, A>, fb: Self::F<'a, B>) -> Self::F<'a, B> { fa?; fb @@ -86,7 +86,7 @@ impl Applicative for OptionClass { } } -impl Monad for OptionClass { +impl Monad for OptionInstance { fn bind<'a, A: 'a, B: 'a>( fa: Self::F<'a, A>, f: impl 'a + FnOnce(A) -> Self::F<'a, B>, @@ -111,7 +111,7 @@ impl Monad for OptionClass { } } -impl LocalFunctor for OptionClass { +impl LocalFunctor for OptionInstance { fn unstuff<'a, A: 'a, B: 'a>( state: Self::F<'a, ControlFlow>, ) -> ControlFlow, A> @@ -136,7 +136,7 @@ impl LocalFunctor for OptionClass { } } -impl Fail<()> for OptionClass { +impl Fail<()> for OptionInstance { fn fail<'a, A: 'a>(_e: ()) -> Self::F<'a, A> where Self: 'a, @@ -149,7 +149,7 @@ impl Fail<()> for OptionClass { mod option_tests { use super::{test_suite, tests, Functor}; - use super::OptionClass as T; + use super::OptionInstance as T; impl tests::Eqr for T { fn eqr<'a, A: PartialEq + std::fmt::Debug + 'a>( diff --git a/src/func/classes/overload.rs b/src/func/instances/overload.rs similarity index 89% rename from src/func/classes/overload.rs rename to src/func/instances/overload.rs index d3caad9..afe7cfc 100644 --- a/src/func/classes/overload.rs +++ b/src/func/instances/overload.rs @@ -2,7 +2,7 @@ use std::marker::PhantomData; use crate::func::*; -pub struct OverloadClass(T, O); +pub struct OverloadInstance(T, O); pub trait DeriveWeakFunctor {} impl DeriveWeakFunctor for O {} @@ -12,13 +12,13 @@ pub trait DeriveApplicative {} impl DeriveApplicative for O {} pub trait DeriveMonad {} -impl WeakFunctor for OverloadClass { +impl WeakFunctor for OverloadInstance { type F<'a, A: 'a> = T::F<'a, A> where Self: 'a; } -impl Functor for OverloadClass { +impl Functor for OverloadInstance { fn fmap<'a, A: 'a, B: 'a>(f: impl 'a + FnOnce(A) -> B, fa: Self::F<'a, A>) -> Self::F<'a, B> where Self: 'a, @@ -41,7 +41,7 @@ impl Functor for OverloadClass { } } -impl Pure for OverloadClass { +impl Pure for OverloadInstance { fn pure<'a, A: 'a>(a: A) -> Self::F<'a, A> where Self: 'a, @@ -50,7 +50,7 @@ impl Pure for OverloadClass { } } -impl ApplicativeSeq for OverloadClass { +impl ApplicativeSeq for OverloadInstance { fn seq<'a, A: 'a, B: 'a>( ff: Self::F<'a, impl 'a + FnOnce(A) -> B>, fa: Self::F<'a, A>, @@ -62,7 +62,7 @@ impl ApplicativeSeq for OverloadClass ApplicativeLA2 for OverloadClass { +impl ApplicativeLA2 for OverloadInstance { fn la2<'a, A: 'a, B: 'a, C: 'a>( f: impl 'a + FnOnce(A, B) -> C, fa: Self::F<'a, A>, @@ -75,7 +75,7 @@ impl ApplicativeLA2 for OverloadClass ApplicativeTuple for OverloadClass { +impl ApplicativeTuple for OverloadInstance { fn tuple<'a, A: 'a, B: 'a>(fab: (Self::F<'a, A>, Self::F<'a, B>)) -> Self::F<'a, (A, B)> where Self: 'a, @@ -84,9 +84,9 @@ impl ApplicativeTuple for OverloadCla } } -impl ApplicativeSelect for OverloadClass {} +impl ApplicativeSelect for OverloadInstance {} -impl Applicative for OverloadClass { +impl Applicative for OverloadInstance { fn discard_first<'a, A: 'a, B: 'a>(fa: Self::F<'a, A>, fb: Self::F<'a, B>) -> Self::F<'a, B> where Self: 'a, @@ -110,7 +110,7 @@ impl OverloadIterative { } } -impl<'a, T: 'a + Monad, O: 'a + DeriveMonad, F: Iterative<'a, T = OverloadClass>> +impl<'a, T: 'a + Monad, O: 'a + DeriveMonad, F: Iterative<'a, T = OverloadInstance>> Iterative<'a> for OverloadIterative { type B = F::B; @@ -128,7 +128,7 @@ impl<'a, T: 'a + Monad, O: 'a + DeriveMonad, F: Iterative<'a, T = OverloadClass< } } -impl Monad for OverloadClass { +impl Monad for OverloadInstance { fn bind<'a, A: 'a, B: 'a>( fa: Self::F<'a, A>, f: impl 'a + FnOnce(A) -> Self::F<'a, B>, @@ -159,7 +159,7 @@ pub struct DeriveFail(Ex); impl DeriveMonad for DeriveFail {} -impl>> Fail for OverloadClass> { +impl>> Fail for OverloadInstance> { fn fail<'a, A: 'a>(e: E) -> Self::F<'a, A> where Self: 'a, @@ -172,7 +172,7 @@ impl>> Fail for OverloadClass(Ex, Fallible); impl MonadFailAny for DeriveFailAny { - type W = OverloadClass>, DeriveFail>; + type W = OverloadInstance>, DeriveFail>; type T = Fallible::W; @@ -240,7 +240,7 @@ impl MonadFailAny for DeriveFailAny { } } -impl SharedFunctor for OverloadClass { +impl SharedFunctor for OverloadInstance { type Shared<'a, A: 'a + Clone> = T::Shared<'a, A> where Self: 'a; @@ -260,7 +260,7 @@ impl SharedFunctor for OverloadClass CovariantFunctor for OverloadClass { +impl CovariantFunctor for OverloadInstance { fn variate<'a: 'b, 'b, A: 'a>(fa: Self::F<'a, A>) -> Self::F<'b, A> where Self: 'a, @@ -269,4 +269,4 @@ impl CovariantFunctor for OverloadCla } } -pub type EmbedFail = OverloadClass>; +pub type EmbedFail = OverloadInstance>; diff --git a/src/func/classes/result.rs b/src/func/instances/result.rs similarity index 89% rename from src/func/classes/result.rs rename to src/func/instances/result.rs index b4ae158..60637fc 100644 --- a/src/func/classes/result.rs +++ b/src/func/instances/result.rs @@ -2,7 +2,7 @@ //! //! If any of the input values are [`Err`], you can expect the output to be [`Err`] as well. //! That includes -//! [`ResultClass::replace`] and [`ResultClass::discard_first`]/[`ResultClass::discard_second`], +//! [`ResultInstance::replace`] and [`ResultInstance::discard_first`]/[`ResultInstance::discard_second`], //! even if the value of the option would be ignored. //! //! For [`Option`] alternative see [`super::option`] @@ -10,13 +10,13 @@ use crate::func::*; #[derive(SharedFunctor, CovariantFunctor)] -pub struct ResultClass(E); +pub struct ResultInstance(E); -impl WeakFunctor for ResultClass { +impl WeakFunctor for ResultInstance { type F<'a, A: 'a> = Result where Self: 'a; } -impl Functor for ResultClass { +impl Functor for ResultInstance { fn fmap<'a, A: 'a, B: 'a>(f: impl 'a + FnOnce(A) -> B, fa: Self::F<'a, A>) -> Self::F<'a, B> where Self: 'a, @@ -41,7 +41,7 @@ impl Functor for ResultClass { } } -impl Pure for ResultClass { +impl Pure for ResultInstance { fn pure<'a, A: 'a>(a: A) -> Self::F<'a, A> where Self: 'a, @@ -50,7 +50,7 @@ impl Pure for ResultClass { } } -impl ApplicativeSeq for ResultClass { +impl ApplicativeSeq for ResultInstance { fn seq<'a, A: 'a, B: 'a>( ff: Self::F<'a, impl 'a + FnOnce(A) -> B>, fa: Self::F<'a, A>, @@ -62,7 +62,7 @@ impl ApplicativeSeq for ResultClass { } } -impl ApplicativeLA2 for ResultClass { +impl ApplicativeLA2 for ResultInstance { fn la2<'a, A: 'a, B: 'a, C: 'a>( f: impl 'a + FnOnce(A, B) -> C, fa: Self::F<'a, A>, @@ -75,7 +75,7 @@ impl ApplicativeLA2 for ResultClass { } } -impl ApplicativeTuple for ResultClass { +impl ApplicativeTuple for ResultInstance { fn tuple<'a, A: 'a, B: 'a>((fa, fb): (Self::F<'a, A>, Self::F<'a, B>)) -> Self::F<'a, (A, B)> where Self: 'a, @@ -84,9 +84,9 @@ impl ApplicativeTuple for ResultClass { } } -impl ApplicativeSelect for ResultClass {} +impl ApplicativeSelect for ResultInstance {} -impl Applicative for ResultClass { +impl Applicative for ResultInstance { fn discard_first<'a, A: 'a, B: 'a>(fa: Self::F<'a, A>, fb: Self::F<'a, B>) -> Self::F<'a, B> where Self: 'a, @@ -104,7 +104,7 @@ impl Applicative for ResultClass { } } -impl Monad for ResultClass { +impl Monad for ResultInstance { fn bind<'a, A: 'a, B: 'a>( fa: Self::F<'a, A>, f: impl 'a + FnOnce(A) -> Self::F<'a, B>, @@ -135,7 +135,7 @@ impl Monad for ResultClass { } } -impl LocalFunctor for ResultClass { +impl LocalFunctor for ResultInstance { fn unstuff<'a, A: 'a, B: 'a>( state: Self::F<'a, ControlFlow>, ) -> ControlFlow, A> @@ -160,7 +160,7 @@ impl LocalFunctor for ResultClass { } } -impl Fail for ResultClass { +impl Fail for ResultInstance { fn fail<'a, A: 'a>(e: E) -> Self::F<'a, A> where Self: 'a, @@ -185,9 +185,9 @@ impl<'a, A: 'a, E0: 'a> ResultExt<'a, A, E0> for Result { } impl MonadFailAny for ResultFailAny { - type W = ResultClass; + type W = ResultInstance; - type T = classes::solo::SoloClass; + type T = instances::solo::SoloInstance; fn map_err<'a, A: 'a, E0: 'a, E1: 'a>( wa: as WeakFunctor>::F<'a, A>, @@ -254,7 +254,7 @@ impl MonadFailAny for ResultFailAny { pub struct ResultFailOver(T); impl MonadFailAny for ResultFailOver { - type W = super::composition::CompositionClass>; + type W = super::composition::CompositionInstance>; type T = T; diff --git a/src/func/classes/solo.rs b/src/func/instances/solo.rs similarity index 84% rename from src/func/classes/solo.rs rename to src/func/instances/solo.rs index 97bf8ca..8641e48 100644 --- a/src/func/classes/solo.rs +++ b/src/func/instances/solo.rs @@ -5,13 +5,13 @@ use crate::func::*; #[derive(SharedFunctor, CovariantFunctor)] -pub struct SoloClass; +pub struct SoloInstance; -impl WeakFunctor for SoloClass { +impl WeakFunctor for SoloInstance { type F<'a, A: 'a> = A; } -impl Functor for SoloClass { +impl Functor for SoloInstance { fn fmap<'a, A: 'a, B: 'a>(f: impl 'a + FnOnce(A) -> B, fa: Self::F<'a, A>) -> Self::F<'a, B> { f(fa) } @@ -26,13 +26,13 @@ impl Functor for SoloClass { } } -impl Pure for SoloClass { +impl Pure for SoloInstance { fn pure<'a, A: 'a>(a: A) -> Self::F<'a, A> { a } } -impl ApplicativeSeq for SoloClass { +impl ApplicativeSeq for SoloInstance { fn seq<'a, A: 'a, B: 'a>( ff: Self::F<'a, impl 'a + FnOnce(A) -> B>, fa: Self::F<'a, A>, @@ -41,7 +41,7 @@ impl ApplicativeSeq for SoloClass { } } -impl ApplicativeLA2 for SoloClass { +impl ApplicativeLA2 for SoloInstance { fn la2<'a, A: 'a, B: 'a, C: 'a>( f: impl 'a + FnOnce(A, B) -> C, fa: Self::F<'a, A>, @@ -51,7 +51,7 @@ impl ApplicativeLA2 for SoloClass { } } -impl ApplicativeTuple for SoloClass { +impl ApplicativeTuple for SoloInstance { fn tuple<'a, A: 'a, B: 'a>((fa, fb): (Self::F<'a, A>, Self::F<'a, B>)) -> Self::F<'a, (A, B)> where Self: 'a, @@ -60,9 +60,9 @@ impl ApplicativeTuple for SoloClass { } } -impl ApplicativeSelect for SoloClass {} +impl ApplicativeSelect for SoloInstance {} -impl Applicative for SoloClass { +impl Applicative for SoloInstance { fn discard_first<'a, A: 'a, B: 'a>(fa: Self::F<'a, A>, fb: Self::F<'a, B>) -> Self::F<'a, B> { drop(fa); fb @@ -74,7 +74,7 @@ impl Applicative for SoloClass { } } -impl Monad for SoloClass { +impl Monad for SoloInstance { fn bind<'a, A: 'a, B: 'a>( fa: Self::F<'a, A>, f: impl 'a + FnOnce(A) -> Self::F<'a, B>, @@ -99,7 +99,7 @@ impl Monad for SoloClass { } } -impl LocalFunctor for SoloClass { +impl LocalFunctor for SoloInstance { fn unstuff<'a, A: 'a, B: 'a>( state: Self::F<'a, ControlFlow>, ) -> ControlFlow, A> @@ -117,7 +117,7 @@ impl LocalFunctor for SoloClass { } } -impl Fail for SoloClass { +impl Fail for SoloInstance { fn fail<'a, A: 'a>(e: std::convert::Infallible) -> Self::F<'a, A> where Self: 'a, diff --git a/src/func/classes/stackless.rs b/src/func/instances/stackless.rs similarity index 95% rename from src/func/classes/stackless.rs rename to src/func/instances/stackless.rs index 64a7bfe..7ae2e90 100644 --- a/src/func/classes/stackless.rs +++ b/src/func/instances/stackless.rs @@ -117,13 +117,13 @@ impl<'a, A: 'a> From for Stackless<'a, A> { } } -pub struct StacklessClass; +pub struct StacklessInstance; -impl WeakFunctor for StacklessClass { +impl WeakFunctor for StacklessInstance { type F<'a, A: 'a> = Stackless<'a, A>; } -impl Functor for StacklessClass { +impl Functor for StacklessInstance { fn fmap<'a, A: 'a, B: 'a>(f: impl 'a + FnOnce(A) -> B, fa: Self::F<'a, A>) -> Self::F<'a, B> where Self: 'a, @@ -147,13 +147,13 @@ impl Functor for StacklessClass { } } -impl Pure for StacklessClass { +impl Pure for StacklessInstance { fn pure<'a, A: 'a>(a: A) -> Self::F<'a, A> { Stackless::from(a) } } -impl ApplicativeSeq for StacklessClass { +impl ApplicativeSeq for StacklessInstance { fn seq<'a, A: 'a, B: 'a>( ff: Self::F<'a, impl 'a + FnOnce(A) -> B>, fa: Self::F<'a, A>, @@ -165,7 +165,7 @@ impl ApplicativeSeq for StacklessClass { } } -impl ApplicativeLA2 for StacklessClass { +impl ApplicativeLA2 for StacklessInstance { fn la2<'a, A: 'a, B: 'a, C: 'a>( f: impl 'a + FnOnce(A, B) -> C, fa: Self::F<'a, A>, @@ -178,7 +178,7 @@ impl ApplicativeLA2 for StacklessClass { } } -impl ApplicativeTuple for StacklessClass { +impl ApplicativeTuple for StacklessInstance { fn tuple<'a, A: 'a, B: 'a>((fa, fb): (Self::F<'a, A>, Self::F<'a, B>)) -> Self::F<'a, (A, B)> where Self: 'a, @@ -187,9 +187,9 @@ impl ApplicativeTuple for StacklessClass { } } -impl ApplicativeSelect for StacklessClass {} +impl ApplicativeSelect for StacklessInstance {} -impl Applicative for StacklessClass { +impl Applicative for StacklessInstance { fn discard_first<'a, A: 'a, B: 'a>(fa: Self::F<'a, A>, fb: Self::F<'a, B>) -> Self::F<'a, B> where Self: 'a, @@ -215,7 +215,7 @@ impl Applicative for StacklessClass { } } -impl Monad for StacklessClass { +impl Monad for StacklessInstance { fn bind<'a, A: 'a, B: 'a>( fa: Self::F<'a, A>, f: impl 'a + FnOnce(A) -> Self::F<'a, B>, @@ -263,7 +263,7 @@ impl Monad for StacklessClass { mod stackless_test { use super::{test_suite, tests, Stackless}; - use super::StacklessClass as T; + use super::StacklessInstance as T; impl tests::Eqr for T { fn eqr<'a, A: PartialEq + std::fmt::Debug + 'a>( diff --git a/src/func/classes/tryfuture.rs b/src/func/instances/tryfuture.rs similarity index 89% rename from src/func/classes/tryfuture.rs rename to src/func/instances/tryfuture.rs index 0bbcb57..d2a91e9 100644 --- a/src/func/classes/tryfuture.rs +++ b/src/func/instances/tryfuture.rs @@ -8,13 +8,13 @@ use futures::{ use crate::func::*; #[derive(CovariantFunctor)] -pub struct TryFutureClass(E); +pub struct TryFutureInstance(E); -impl WeakFunctor for TryFutureClass { +impl WeakFunctor for TryFutureInstance { type F<'a, A: 'a> = Pin>>> where Self: 'a; } -impl Functor for TryFutureClass { +impl Functor for TryFutureInstance { fn fmap<'a, A: 'a, B: 'a>(f: impl 'a + FnOnce(A) -> B, fa: Self::F<'a, A>) -> Self::F<'a, B> where Self: 'a, @@ -33,7 +33,7 @@ impl Functor for TryFutureClass { } } -impl Pure for TryFutureClass { +impl Pure for TryFutureInstance { fn pure<'a, A: 'a>(a: A) -> Self::F<'a, A> where Self: 'a, @@ -42,7 +42,7 @@ impl Pure for TryFutureClass { } } -impl ApplicativeSeq for TryFutureClass { +impl ApplicativeSeq for TryFutureInstance { fn seq<'a, A: 'a, B: 'a>( ff: Self::F<'a, impl 'a + FnOnce(A) -> B>, fa: Self::F<'a, A>, @@ -57,7 +57,7 @@ impl ApplicativeSeq for TryFutureClass { } } -impl ApplicativeLA2 for TryFutureClass { +impl ApplicativeLA2 for TryFutureInstance { fn la2<'a, A: 'a, B: 'a, C: 'a>( f: impl 'a + FnOnce(A, B) -> C, fa: Self::F<'a, A>, @@ -73,7 +73,7 @@ impl ApplicativeLA2 for TryFutureClass { } } -impl ApplicativeTuple for TryFutureClass { +impl ApplicativeTuple for TryFutureInstance { fn tuple<'a, A: 'a, B: 'a>((fa, fb): (Self::F<'a, A>, Self::F<'a, B>)) -> Self::F<'a, (A, B)> where Self: 'a, @@ -82,7 +82,7 @@ impl ApplicativeTuple for TryFutureClass { } } -impl ApplicativeSelect for TryFutureClass { +impl ApplicativeSelect for TryFutureInstance { fn select<'a, A: 'a, B: 'a, C: 'a>( f: impl 'a + FnOnce(Selected<'a, A, B, Self>) -> C, fa: Self::F<'a, A>, @@ -102,7 +102,7 @@ impl ApplicativeSelect for TryFutureClass { } } -impl Applicative for TryFutureClass { +impl Applicative for TryFutureInstance { fn discard_first<'a, A: 'a, B: 'a>(fa: Self::F<'a, A>, fb: Self::F<'a, B>) -> Self::F<'a, B> where Self: 'a, @@ -118,7 +118,7 @@ impl Applicative for TryFutureClass { } } -impl Monad for TryFutureClass { +impl Monad for TryFutureInstance { fn bind<'a, A: 'a, B: 'a>( fa: Self::F<'a, A>, f: impl 'a + FnOnce(A) -> Self::F<'a, B>, @@ -151,7 +151,7 @@ impl Monad for TryFutureClass { } } -impl SharedFunctor for TryFutureClass { +impl SharedFunctor for TryFutureInstance { type Shared<'a, A: 'a + Clone> = Shared>>>> where Self: 'a; @@ -171,7 +171,7 @@ impl SharedFunctor for TryFutureClass { } } -impl Fail for TryFutureClass { +impl Fail for TryFutureInstance { fn fail<'a, A: 'a>(e: E) -> Self::F<'a, A> where Self: 'a, @@ -184,9 +184,9 @@ impl Fail for TryFutureClass { pub struct FutureFailAny; impl MonadFailAny for FutureFailAny { - type W = TryFutureClass; + type W = TryFutureInstance; - type T = classes::future::FutureClass; + type T = instances::future::FutureInstance; fn map_err<'a, A: 'a, E0: 'a, E1: 'a>( wa: as WeakFunctor>::F<'a, A>, diff --git a/src/rstd/tracing.rs b/src/rstd/tracing.rs index becc9ad..aebba60 100644 --- a/src/rstd/tracing.rs +++ b/src/rstd/tracing.rs @@ -22,9 +22,9 @@ pub use self::traced::*; pub struct TracedDiagnostic; /// Implementation of [`Monad`] for [Traced] objects. -pub type TracedClass = classes::effect::EffectClass; +pub type TracedInstance = instances::effect::EffectInstance; -impl classes::effect::Effect for TraceBox { +impl instances::effect::Effect for TraceBox { fn e_pure() -> Self { TraceBox::pure() } @@ -86,7 +86,7 @@ impl Traced { } } -impl Diagnostic for TracedDiagnostic { +impl Diagnostic for TracedDiagnostic { fn after<'a: 'b, 'b, A>(fa: Traced, event: impl FnOnce() -> String) -> Traced { fa.after(TraceBox::event(event())) } diff --git a/src/rstd/tracing/traceable.rs b/src/rstd/tracing/traceable.rs index 6bdcef5..a8a2515 100644 --- a/src/rstd/tracing/traceable.rs +++ b/src/rstd/tracing/traceable.rs @@ -6,15 +6,15 @@ struct TracedResolver<'a, Ctx: 'a + Context> { resolver: Rc>, } -impl<'a, Ctx: 'a + Context> TracedResolver<'a, Ctx> { +impl<'a, Ctx: 'a + Context> TracedResolver<'a, Ctx> { fn wrap(resolver: Rc>) -> Rc> { Rc::new(Self { resolver }) } } -impl<'a, Ctx: 'a + Context> Resolver<'a, Ctx> for TracedResolver<'a, Ctx> { +impl<'a, Ctx: 'a + Context> Resolver<'a, Ctx> for TracedResolver<'a, Ctx> { fn resolve(self: Rc, address: Address) -> HashResolution<'a, Ctx> { - TracedClass::fmap( + TracedInstance::fmap( |resolved| { let (src, resolver) = resolved?; let delayed: Rc> = Rc::new(TracedResolver { resolver }); @@ -27,7 +27,9 @@ impl<'a, Ctx: 'a + Context> Resolver<'a, Ctx> for TracedResolve } /// Extension trait to trace the evaluation flow. -pub trait Traceable<'a, Ctx: 'a + Context>: Mentionable<'a, Ctx> + Sized { +pub trait Traceable<'a, Ctx: 'a + Context>: + Mentionable<'a, Ctx> + Sized +{ /// Re-cast the value, adding an extra[^extra] /// note ([`RenderedCommon::Resolution`]) to the trace on each resolution. /// @@ -36,7 +38,7 @@ pub trait Traceable<'a, Ctx: 'a + Context>: Mentionable<'a, Ctx fn trace(self: Rc) -> CastResult<'a, Ctx, Self>; } -impl<'a, Ctx: 'a + Context, A: Mentionable<'a, Ctx>> Traceable<'a, Ctx> for A +impl<'a, Ctx: 'a + Context, A: Mentionable<'a, Ctx>> Traceable<'a, Ctx> for A where Ctx::LookupError<'a>: From>, { diff --git a/src/rstd/tracing/traced.rs b/src/rstd/tracing/traced.rs index 45d8511..5268bf9 100644 --- a/src/rstd/tracing/traced.rs +++ b/src/rstd/tracing/traced.rs @@ -3,4 +3,4 @@ use super::*; /// Wrapper containing the value and the corresponding execution trace. /// /// For what the trace contains, see its rendered form, [`RenderedAny`]. -pub type Traced = classes::effect::WithEffect; +pub type Traced = instances::effect::WithEffect; diff --git a/src/testing.rs b/src/testing.rs index d82c4a4..3bf99bb 100644 --- a/src/testing.rs +++ b/src/testing.rs @@ -67,9 +67,9 @@ impl<'a> Display for TestLookupError<'a> { impl<'a> Error for TestLookupError<'a> {} impl Context for TestContextPlain { - type T = classes::solo::SoloClass; + type T = instances::solo::SoloInstance; - type Fallible = classes::result::ResultFailAny; + type Fallible = instances::result::ResultFailAny; type D = NoDiagnostic; diff --git a/src/testing/counted.rs b/src/testing/counted.rs index 511ffad..71d8903 100644 --- a/src/testing/counted.rs +++ b/src/testing/counted.rs @@ -9,9 +9,9 @@ use super::*; pub struct TestContextCounted; impl Context for TestContextCounted { - type T = CountedClass; + type T = CountedInstance; - type Fallible = classes::result::ResultFailOver; + type Fallible = instances::result::ResultFailOver; type D = NoDiagnostic; @@ -22,9 +22,9 @@ impl Context for TestContextCounted { } } -pub type CountedClass = classes::effect::EffectClass; +pub type CountedInstance = instances::effect::EffectInstance; -impl classes::effect::Effect for usize { +impl instances::effect::Effect for usize { fn e_pure() -> Self { 0 } @@ -38,7 +38,7 @@ impl classes::effect::Effect for usize { } } -pub type Counted = classes::effect::WithEffect; +pub type Counted = instances::effect::WithEffect; impl Counted { fn add(self, n: usize) -> Self { @@ -67,7 +67,7 @@ impl<'a> CountedResolver<'a> { impl<'a> Resolver<'a, TestContextCounted> for CountedResolver<'a> { fn resolve(self: Rc, address: Address) -> HashResolution<'a, TestContextCounted> { - CountedClass::fmap( + CountedInstance::fmap( |resolved| { let (src, resolver) = resolved?; let delayed: Rc> = diff --git a/src/testing/traced.rs b/src/testing/traced.rs index 094484f..31fccd2 100644 --- a/src/testing/traced.rs +++ b/src/testing/traced.rs @@ -6,9 +6,9 @@ use super::*; pub struct TestContextTraced; impl Context for TestContextTraced { - type T = TracedClass; + type T = TracedInstance; - type Fallible = classes::result::ResultFailOver; + type Fallible = instances::result::ResultFailOver; type D = TracedDiagnostic;