Function effing_mad::transform1
source · pub fn transform1<G1, R, E1, E2, H, PreEs, PreHandleEs, HandlerEs, E1Index, PreIs, PreHandleIs, HandlerIs, I1Index, BeginIndex1, BeginIndex2, BeginIndex3, SubsetIndices1, SubsetIndices2, EmbedIndices1, EmbedIndices2, EmbedIndices3>(
g: G1,
handler: impl FnMut(E1) -> H
) -> impl Generator<Coproduct<Tagged<E2::Injection, E2>, PreHandleIs>, Yield = Coproduct<E2, PreHandleEs>, Return = R>where
E1: Effect,
E2: Effect,
H: Generator<HandlerIs, Yield = HandlerEs, Return = E1::Injection>,
PreEs: EffectList<Injections = PreIs> + CoprodUninjector<E1, E1Index, Remainder = PreHandleEs>,
PreHandleEs: EffectList<Injections = PreHandleIs> + CoproductEmbedder<Coproduct<E2, PreHandleEs>, EmbedIndices1>,
HandlerEs: EffectList<Injections = HandlerIs> + CoproductEmbedder<Coproduct<E2, PreHandleEs>, EmbedIndices2>,
PreIs: CoprodInjector<Begin, BeginIndex1> + CoprodUninjector<Tagged<E1::Injection, E1>, I1Index, Remainder = PreHandleIs>,
PreHandleIs: CoproductEmbedder<PreIs, EmbedIndices3>,
HandlerIs: CoprodInjector<Begin, BeginIndex2>,
Coproduct<Tagged<E2::Injection, E2>, PreHandleIs>: CoprodInjector<Begin, BeginIndex3> + CoproductSubsetter<HandlerIs, SubsetIndices1> + CoproductSubsetter<PreHandleIs, SubsetIndices2>,
G1: Generator<PreIs, Yield = PreEs, Return = R>,Expand description
Handle one effect of g by running a new effect.
This function is a special case of transform for when the handler introduces one effect on
top of the ones from g that it’s not handling.
It is possible for the handler to run effects from g as well as the effect that it introduces.
To transform without introducing any effects, see transform0.