move speculative

This commit is contained in:
AF 2023-05-28 11:36:04 +00:00
parent 953e4a302a
commit 73c4458f23
3 changed files with 14 additions and 11 deletions

View File

@ -1,4 +1,5 @@
//! Data structures and algorithms, independent of [`crate::rcore`] concepts.
pub mod binary;
pub mod speculative;
pub mod traversible;

View File

@ -1,11 +1,11 @@
use super::*;
use crate::func::*;
type Frwa<'a, A, E0, E1, Fallible> =
Wrap<'a, Result<WrapE<'a, A, E0, Fallible>, E1>, <Fallible as MonadFailAny<'a>>::T>;
type Wwa<'a, A, E0, E1, Fallible> = WrapE<'a, WrapE<'a, A, E0, Fallible>, E1, Fallible>;
pub trait SpeculativeFail<'a>: MonadFailAny<'a> {
trait SpeculativeFailImpl<'a>: MonadFailAny<'a> {
fn _speculative_a_wb<A: 'a, B: 'a, E0: 'a, E1: 'a>(
a: A,
wb: WrapE<'a, B, E0, Self>,
@ -81,7 +81,7 @@ pub trait SpeculativeFail<'a>: MonadFailAny<'a> {
)
}
fn speculative<A: 'a, B: 'a, E0: 'a, E1: 'a>(
fn _speculative<A: 'a, B: 'a, E0: 'a, E1: 'a>(
wwa: Wwa<'a, A, E0, E1, Self>,
wwb: Wwa<'a, B, E0, E1, Self>,
) -> WrapE<'a, (A, B), Result<E0, E1>, Self> {
@ -101,4 +101,14 @@ pub trait SpeculativeFail<'a>: MonadFailAny<'a> {
}
}
pub trait SpeculativeFail<'a>: MonadFailAny<'a> {
fn speculative<A: 'a, B: 'a, E0: 'a, E1: 'a>(
wwa: Wwa<'a, A, E0, E1, Self>,
wwb: Wwa<'a, B, E0, E1, Self>,
) -> WrapE<'a, (A, B), Result<E0, E1>, Self> {
Self::_speculative(wwa, wwb)
}
}
impl<'a, Fallible: ?Sized + MonadFailAny<'a>> SpeculativeFailImpl<'a> for Fallible {}
impl<'a, Fallible: ?Sized + MonadFailAny<'a>> SpeculativeFail<'a> for Fallible {}

View File

@ -13,7 +13,6 @@ mod controlflow;
pub mod copy_func;
pub mod derivations;
pub mod instances;
mod speculative;
#[cfg(test)]
pub mod test_suite;
#[cfg(test)]
@ -257,13 +256,6 @@ pub trait MonadFailAnyExt<'a>: MonadFailAny<'a> {
fn fail<E: 'a, A: 'a>(e: E) -> WrapE<'a, A, E, Self> {
<Self::W<E> as Fail<E>>::fail(e)
}
fn speculative<A: 'a, B: 'a, E0: 'a, E1: 'a>(
wwa: WrapE<'a, WrapE<'a, A, E0, Self>, E1, Self>,
wwb: WrapE<'a, WrapE<'a, B, E0, Self>, E1, Self>,
) -> WrapE<'a, (A, B), Result<E0, E1>, Self> {
<Self as speculative::SpeculativeFail>::speculative(wwa, wwb)
}
}
impl<'a, Fallible: ?Sized + MonadFailAny<'a>> MonadFailAnyExt<'a> for Fallible {}