internal static IGen <T> SelectError <T>(this IGen <T> gen, Func <IGenErrorData, IGenErrorData> errorSelector) { IGenIteration <T> SelectError(IGenError <T> error) { var selectedErrorData = errorSelector(error); return(GenIterationFactory.Error <T>( error.ReplayParameters, error.NextParameters, selectedErrorData.GenName, selectedErrorData.Message)); } GenIterationTransformation <T, T> transformation = (iteration) => { return(iteration.Match( onError: error => SelectError(error), onInstance: instance => instance, onDiscard: discard => discard)); }; return(gen.TransformIterations(transformation)); }
public static IGen <U> TransformIterations <T, U>( this IGen <T> gen, GenIterationTransformation <T, U> transformation) => gen.TransformStream(stream => stream.Select(transformation.Invoke));