func::weakfunctorany
This commit is contained in:
parent
582dd76eab
commit
16c939e699
12
src/func.rs
12
src/func.rs
@ -21,6 +21,7 @@ pub mod shared;
|
|||||||
pub mod test_suite;
|
pub mod test_suite;
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub mod tests;
|
pub mod tests;
|
||||||
|
pub mod weakfunctorany;
|
||||||
|
|
||||||
pub use self::applicative_select::{
|
pub use self::applicative_select::{
|
||||||
ApplicativeSelect, ApplicativeSelectExt, Selected, SelectedWrapped,
|
ApplicativeSelect, ApplicativeSelectExt, Selected, SelectedWrapped,
|
||||||
@ -30,13 +31,6 @@ pub use self::extensions::MonadExt;
|
|||||||
#[cfg(doc)]
|
#[cfg(doc)]
|
||||||
use self::instances::stackless::StacklessInstance;
|
use self::instances::stackless::StacklessInstance;
|
||||||
|
|
||||||
pub trait WeakFunctorAny {
|
|
||||||
/// Type of the wrapped value.
|
|
||||||
type FAny<'a, A: 'a>: 'a
|
|
||||||
where
|
|
||||||
Self: 'a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Part of Haskell's `Functor f` responsible for having `f a`.
|
/// Part of Haskell's `Functor f` responsible for having `f a`.
|
||||||
///
|
///
|
||||||
/// <https://hackage.haskell.org/package/base-4.18.0.0/docs/Data-Functor.html>
|
/// <https://hackage.haskell.org/package/base-4.18.0.0/docs/Data-Functor.html>
|
||||||
@ -44,10 +38,6 @@ pub trait WeakFunctor<'a>: 'a {
|
|||||||
type F<A: 'a>: 'a;
|
type F<A: 'a>: 'a;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, T: ?Sized + 'a + WeakFunctorAny> WeakFunctor<'a> for T {
|
|
||||||
type F<A: 'a> = T::FAny<'a, A>;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub type Wrap<'a, A, T> = <T as WeakFunctor<'a>>::F<A>;
|
pub type Wrap<'a, A, T> = <T as WeakFunctor<'a>>::F<A>;
|
||||||
|
|
||||||
/// Rust-specific implementation of [`Functor`], respecting `move` semantics.
|
/// Rust-specific implementation of [`Functor`], respecting `move` semantics.
|
||||||
|
@ -5,9 +5,9 @@ pub use super::{
|
|||||||
instances,
|
instances,
|
||||||
local::LocalFunctor,
|
local::LocalFunctor,
|
||||||
shared::{SharedFunctor, SharedFunctorAny},
|
shared::{SharedFunctor, SharedFunctorAny},
|
||||||
|
weakfunctorany::WeakFunctorAny,
|
||||||
Applicative, ApplicativeLA2, ApplicativeSelect, ApplicativeSelectExt, ApplicativeSeq,
|
Applicative, ApplicativeLA2, ApplicativeSelect, ApplicativeSelectExt, ApplicativeSeq,
|
||||||
ApplicativeTuple, Functor, Monad, Pure, Selected, SelectedWrapped, WeakFunctor, WeakFunctorAny,
|
ApplicativeTuple, Functor, Monad, Pure, Selected, SelectedWrapped, WeakFunctor, Wrap,
|
||||||
Wrap,
|
|
||||||
};
|
};
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
pub use super::{test_suite, tests};
|
pub use super::{test_suite, tests};
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
pub use std::ops::ControlFlow;
|
pub use std::ops::ControlFlow;
|
||||||
|
|
||||||
use super::*;
|
#[cfg(doc)]
|
||||||
|
use super::Monad;
|
||||||
|
use super::{weakfunctorany::WeakFunctorAny, Functor, Pure, WeakFunctor, Wrap};
|
||||||
|
|
||||||
pub struct ControlFlowInstance<C>(ControlFlow<(), C>);
|
pub struct ControlFlowInstance<C>(ControlFlow<(), C>);
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
|
use super::{weakfunctorany::WeakFunctorAny, WeakFunctor};
|
||||||
pub use radn_derive::SharedFunctorAny;
|
pub use radn_derive::SharedFunctorAny;
|
||||||
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
pub trait SharedFunctorAny: WeakFunctorAny {
|
pub trait SharedFunctorAny: WeakFunctorAny {
|
||||||
type SharedAny<'a, A: 'a + Clone>: 'a + Clone
|
type SharedAny<'a, A: 'a + Clone>: 'a + Clone
|
||||||
where
|
where
|
||||||
|
12
src/func/weakfunctorany.rs
Normal file
12
src/func/weakfunctorany.rs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
use super::WeakFunctor;
|
||||||
|
|
||||||
|
pub trait WeakFunctorAny {
|
||||||
|
/// Type of the wrapped value.
|
||||||
|
type FAny<'a, A: 'a>: 'a
|
||||||
|
where
|
||||||
|
Self: 'a;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, T: ?Sized + 'a + WeakFunctorAny> WeakFunctor<'a> for T {
|
||||||
|
type F<A: 'a> = T::FAny<'a, A>;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user