func::fail
isolation
This commit is contained in:
parent
25ede0db44
commit
6dfab12dbf
@ -1,3 +1,5 @@
|
||||
use fail::*;
|
||||
|
||||
use crate::func::*;
|
||||
|
||||
type Frwa<'a, A, E0, E1, Fallible> =
|
||||
|
@ -1,4 +1,4 @@
|
||||
use crate::flow::traversible::*;
|
||||
use crate::{flow::traversible::*, func::class_prelude::MonadFail};
|
||||
|
||||
pub fn n_contains<'a, T: MonadFail<'a, ()>, A: 'a + Clone, D: 'a + PartialEq>(
|
||||
comparator: &'a dyn Comparator<A>,
|
||||
|
@ -1,5 +1,6 @@
|
||||
use crate::flow::comparator::*;
|
||||
use crate::flow::traversible::*;
|
||||
use crate::func::class_prelude::MonadFail;
|
||||
|
||||
fn and(_l: (), _r: ()) {}
|
||||
|
||||
|
@ -8,11 +8,12 @@
|
||||
//! * <https://hackage.haskell.org/package/base-4.18.0.0/docs/Control-Monad.html>
|
||||
|
||||
mod applicative_select;
|
||||
pub mod class_prelude;
|
||||
pub mod context;
|
||||
mod controlflow;
|
||||
pub mod derivations;
|
||||
mod extensions;
|
||||
mod fail;
|
||||
pub mod fail;
|
||||
pub mod instances;
|
||||
pub mod shared;
|
||||
#[cfg(test)]
|
||||
@ -27,8 +28,7 @@ pub use self::applicative_select::{
|
||||
};
|
||||
use self::controlflow::{BindableMut, ControlFlowInstance};
|
||||
pub use self::controlflow::{Iterative, IterativeWrapped};
|
||||
pub use self::extensions::{MonadExt, MonadFailAnyExt};
|
||||
pub use self::fail::{Fail, MonadFail, MonadFailAny, WrapE};
|
||||
pub use self::extensions::MonadExt;
|
||||
#[cfg(doc)]
|
||||
use self::instances::stackless::StacklessInstance;
|
||||
|
||||
|
11
src/func/class_prelude.rs
Normal file
11
src/func/class_prelude.rs
Normal file
@ -0,0 +1,11 @@
|
||||
pub use super::{
|
||||
extensions::MonadExt,
|
||||
fail::{Fail, MonadFail, MonadFailAny, MonadFailAnyExt, WrapE},
|
||||
instances,
|
||||
shared::{SharedFunctor, SharedFunctorAny},
|
||||
Applicative, ApplicativeLA2, ApplicativeSelect, ApplicativeSelectExt, ApplicativeSeq,
|
||||
ApplicativeTuple, ControlFlow, Functor, Iterative, IterativeWrapped, LocalFunctor, Monad, Pure,
|
||||
Selected, SelectedWrapped, WeakFunctor, WeakFunctorAny, Wrap,
|
||||
};
|
||||
#[cfg(test)]
|
||||
pub use super::{test_suite, tests};
|
@ -1,4 +1,4 @@
|
||||
use super::*;
|
||||
use super::{fail::*, *};
|
||||
|
||||
pub type WrapC<'a, A, Ctx> = Wrap<'a, A, <Ctx as FunctorContext<'a>>::T>;
|
||||
|
||||
|
@ -20,15 +20,3 @@ pub trait MonadExt<'a>: Monad<'a> {
|
||||
Self::join(Self::la2(fa, fb, f))
|
||||
}
|
||||
}
|
||||
|
||||
pub trait MonadFailAnyExt<'a>: MonadFailAny<'a> {
|
||||
fn pure<E: 'a, A: 'a>(a: A) -> WrapE<'a, A, E, Self> {
|
||||
<Self::W<E> as Pure>::pure(a)
|
||||
}
|
||||
|
||||
fn fail<E: 'a, A: 'a>(e: E) -> WrapE<'a, A, E, Self> {
|
||||
<Self::W<E> as Fail<E>>::fail(e)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, Fallible: ?Sized + MonadFailAny<'a>> MonadFailAnyExt<'a> for Fallible {}
|
||||
|
@ -84,3 +84,15 @@ pub trait MonadFailAny<'a>: 'a {
|
||||
}
|
||||
|
||||
pub type WrapE<'a, A, E, Fallible> = Wrap<'a, A, <Fallible as MonadFailAny<'a>>::W<E>>;
|
||||
|
||||
pub trait MonadFailAnyExt<'a>: MonadFailAny<'a> {
|
||||
fn pure<E: 'a, A: 'a>(a: A) -> WrapE<'a, A, E, Self> {
|
||||
<Self::W<E> as Pure>::pure(a)
|
||||
}
|
||||
|
||||
fn fail<E: 'a, A: 'a>(e: E) -> WrapE<'a, A, E, Self> {
|
||||
<Self::W<E> as Fail<E>>::fail(e)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, Fallible: ?Sized + MonadFailAny<'a>> MonadFailAnyExt<'a> for Fallible {}
|
||||
|
@ -21,7 +21,7 @@
|
||||
//! [^research]: instances used for research purposes to enhance the abstract interfaces.
|
||||
|
||||
#[cfg(doc)]
|
||||
use crate::func::*;
|
||||
use crate::func::{fail::*, *};
|
||||
|
||||
pub mod composition;
|
||||
pub mod effect;
|
||||
|
@ -4,9 +4,9 @@
|
||||
//!
|
||||
//! For [`future`]-[`result`] composition, see [`tryfuture`].
|
||||
|
||||
use crate::func::class_prelude::*;
|
||||
#[cfg(doc)]
|
||||
use crate::func::instances::*;
|
||||
use crate::func::{shared::*, *};
|
||||
|
||||
pub struct CompositionInstance<U, V>(U, V);
|
||||
|
||||
|
@ -4,9 +4,9 @@
|
||||
//!
|
||||
//! For no extra data, see [`solo`].
|
||||
|
||||
use crate::func::class_prelude::*;
|
||||
#[cfg(doc)]
|
||||
use crate::func::instances::*;
|
||||
use crate::func::{shared::*, *};
|
||||
|
||||
/// Metadata type.
|
||||
pub trait Effect {
|
||||
|
@ -12,9 +12,9 @@ use futures::{
|
||||
join, FutureExt,
|
||||
};
|
||||
|
||||
use crate::func::class_prelude::*;
|
||||
#[cfg(doc)]
|
||||
use crate::func::instances::*;
|
||||
use crate::func::{shared::*, *};
|
||||
|
||||
pub struct FutureInstance;
|
||||
|
||||
|
@ -9,9 +9,9 @@
|
||||
|
||||
use std::{cell::RefCell, rc::Rc};
|
||||
|
||||
use crate::func::class_prelude::*;
|
||||
#[cfg(doc)]
|
||||
use crate::func::instances::*;
|
||||
use crate::func::{shared::*, *};
|
||||
|
||||
pub struct LazyInstance;
|
||||
|
||||
|
@ -9,9 +9,9 @@
|
||||
//!
|
||||
//! For values that are never [`None`], see [`solo`].
|
||||
|
||||
use crate::func::class_prelude::*;
|
||||
#[cfg(doc)]
|
||||
use crate::func::instances::*;
|
||||
use crate::func::{shared::*, *};
|
||||
|
||||
#[derive(SharedFunctorAny)]
|
||||
pub struct OptionInstance;
|
||||
|
@ -6,9 +6,9 @@
|
||||
|
||||
use std::marker::PhantomData;
|
||||
|
||||
use crate::func::class_prelude::*;
|
||||
#[cfg(doc)]
|
||||
use crate::func::instances::*;
|
||||
use crate::func::{shared::*, *};
|
||||
|
||||
pub struct OverloadInstance<T, O>(T, O);
|
||||
|
||||
|
@ -9,9 +9,9 @@
|
||||
//!
|
||||
//! For values that are never [`Err`], see [`solo`].
|
||||
|
||||
use crate::func::class_prelude::*;
|
||||
#[cfg(doc)]
|
||||
use crate::func::instances::*;
|
||||
use crate::func::{shared::*, *};
|
||||
|
||||
#[derive(SharedFunctorAny)]
|
||||
pub struct ResultInstance<E>(E);
|
||||
|
@ -4,9 +4,9 @@
|
||||
//!
|
||||
//! For abstracting away dealing with fallible data, see [`option`]/[`result`].
|
||||
|
||||
use crate::func::class_prelude::*;
|
||||
#[cfg(doc)]
|
||||
use crate::func::instances::*;
|
||||
use crate::func::{shared::*, *};
|
||||
|
||||
#[derive(SharedFunctorAny)]
|
||||
pub struct SoloInstance;
|
||||
|
@ -5,10 +5,10 @@
|
||||
|
||||
use std::{cell::Cell, rc::Rc};
|
||||
|
||||
use crate::func::derivations::*;
|
||||
use crate::func::class_prelude::*;
|
||||
use crate::func::derivations::{ApplicativeLA2ViaSeq, ApplicativeTupleViaLA2};
|
||||
#[cfg(doc)]
|
||||
use crate::func::instances::*;
|
||||
use crate::func::*;
|
||||
|
||||
enum EvalTree<'a> {
|
||||
Atom(Box<dyn 'a + FnOnce() -> Oet<'a>>),
|
||||
|
@ -11,9 +11,9 @@ use futures::{
|
||||
try_join, FutureExt,
|
||||
};
|
||||
|
||||
use crate::func::class_prelude::*;
|
||||
#[cfg(doc)]
|
||||
use crate::func::instances::*;
|
||||
use crate::func::{shared::*, *};
|
||||
|
||||
pub struct TryFutureInstance<E>(E);
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
use fail::*;
|
||||
|
||||
use super::*;
|
||||
|
||||
/// Execution context.
|
||||
|
@ -1,5 +1,7 @@
|
||||
//! Shorthands for using [`Context::Fallible`].
|
||||
|
||||
use fail::*;
|
||||
|
||||
use crate::func::context::*;
|
||||
|
||||
use super::*;
|
||||
|
Loading…
Reference in New Issue
Block a user