Point::resolve_map

This commit is contained in:
AF 2023-06-23 12:31:11 +00:00
parent 479d011123
commit 99b87c2e29
4 changed files with 10 additions and 3 deletions

View File

@ -30,4 +30,11 @@ impl<'a, Ctx: Context<'a>, A: Mentionable<'a, Ctx>> Point<'a, Ctx, A> {
pub fn resolve(&self) -> Resolution<'a, Ctx, A> { pub fn resolve(&self) -> Resolution<'a, Ctx, A> {
self.origin.clone().resolve() self.origin.clone().resolve()
} }
pub fn resolve_map<B: 'a>(
&self,
f: impl 'a + FnOnce(ResolutionResult<'a, Ctx, A>) -> B,
) -> Wrapped<'a, Ctx, B> {
Ctx::fmap(self.resolve(), f)
}
} }

View File

@ -144,7 +144,7 @@ where
Ok(point) => point, Ok(point) => point,
Err(cast_error) => return cast_error.pure::<Ctx>(), Err(cast_error) => return cast_error.pure::<Ctx>(),
}; };
Ctx::fmap(point.resolve(), cast_resolved) point.resolve_map(cast_resolved)
} }
} }

View File

@ -164,7 +164,7 @@ impl<'a, Ctx: Context<'a>, A: Mentionable<'a, Ctx> + Clone> ExtStackClone<'a, Ct
fn vec(self) -> StackVecWrapped<'a, Ctx, A> { fn vec(self) -> StackVecWrapped<'a, Ctx, A> {
Ctx::T::iterate_mut((vec![], self), |(mut vec, stack)| match stack { Ctx::T::iterate_mut((vec![], self), |(mut vec, stack)| match stack {
Nullable::Null(_) => Ctx::pure(ControlFlow::Break(Ok(vec))), Nullable::Null(_) => Ctx::pure(ControlFlow::Break(Ok(vec))),
Nullable::NotNull(point) => Ctx::fmap(point.resolve(), |resolved| { Nullable::NotNull(point) => point.resolve_map(|resolved| {
let node = match resolved { let node = match resolved {
Ok(node) => node, Ok(node) => node,
Err(error) => { Err(error) => {

View File

@ -92,7 +92,7 @@ impl<'a, Ctx: Context<'a>, A: Mentionable<'a, Ctx> + Clone, C: 'a + Comparator<A
&self, &self,
reference: &Self::Reference, reference: &Self::Reference,
) -> crate::flow::binary::BTWrap<'a, Self, Self::Node> { ) -> crate::flow::binary::BTWrap<'a, Self, Self::Node> {
Ctx::stuff(Ctx::fmap(reference.resolve(), |resolved| { Ctx::stuff(reference.resolve_map(|resolved| {
resolved resolved
.map(|rc| rc.as_ref().clone()) .map(|rc| rc.as_ref().clone())
.map_err(TreeContextError::Resolution) .map_err(TreeContextError::Resolution)