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