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.