diff --git a/src/flow.rs b/src/flow.rs index 0302084..21eae0c 100644 --- a/src/flow.rs +++ b/src/flow.rs @@ -1,4 +1,5 @@ //! Data structures and algorithms, independent of [`crate::rcore`] concepts. pub mod binary; +pub mod speculative; pub mod traversible; diff --git a/src/func/speculative.rs b/src/flow/speculative.rs similarity index 90% rename from src/func/speculative.rs rename to src/flow/speculative.rs index 54d713e..8e06936 100644 --- a/src/func/speculative.rs +++ b/src/flow/speculative.rs @@ -1,11 +1,11 @@ -use super::*; +use crate::func::*; type Frwa<'a, A, E0, E1, Fallible> = Wrap<'a, Result, E1>, >::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, wb: WrapE<'a, B, E0, Self>, @@ -81,7 +81,7 @@ pub trait SpeculativeFail<'a>: MonadFailAny<'a> { ) } - fn speculative( + fn _speculative( wwa: Wwa<'a, A, E0, E1, Self>, wwb: Wwa<'a, B, E0, E1, Self>, ) -> WrapE<'a, (A, B), Result, Self> { @@ -101,4 +101,14 @@ pub trait SpeculativeFail<'a>: MonadFailAny<'a> { } } +pub trait SpeculativeFail<'a>: MonadFailAny<'a> { + fn speculative( + wwa: Wwa<'a, A, E0, E1, Self>, + wwb: Wwa<'a, B, E0, E1, Self>, + ) -> WrapE<'a, (A, B), Result, 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 {} diff --git a/src/func.rs b/src/func.rs index 7f78849..dcda31b 100644 --- a/src/func.rs +++ b/src/func.rs @@ -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: E) -> WrapE<'a, A, E, Self> { as Fail>::fail(e) } - - fn speculative( - 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, Self> { - ::speculative(wwa, wwb) - } } impl<'a, Fallible: ?Sized + MonadFailAny<'a>> MonadFailAnyExt<'a> for Fallible {}