Adapt
Handler context transformation. Contravariant on context, covariant on continuation.
adapt
Transform a handler's state context.
adapt : { get : P -> S, set : P -> S -> P } -> Handler<S> -> Handler<P>
Wraps a handler that works with child state S so it works with parent state P, using a get/set lens. Propagates both resume and abort.
counterHandler = { param, state }: { resume = null; state = state + param; };
adapted = adapt { get = s: s.counter; set = s: c: s // { counter = c; }; } counterHandler;
# adapted now works with { counter = 0; logs = []; } state
adaptHandlers
Adapt an entire handler set (attrset of handlers) to a different state context. Applies the same get/set lens to every handler in the set.
stateHandlers = {
get = { param, state }: { value = state; inherit state; };
put = { param, state }: { value = null; state = param; };
};
adapted = adaptHandlers { get = s: s.data; set = s: d: s // { data = d; }; } stateHandlers;