public static IFaceInstruction <R> MapI <T, R>(this IFaceInstruction <T> instruction, Func <T, R> f) { Func <Member1 <T>, Func <T, R>, Member1 <R> > mapM1 = (m1, g) => { (var data, var f) = m1; return(new Member1 <R>(data, x => g(f(x)))); }; Func <Member2 <T>, Func <T, R>, Member2 <R> > mapM2 = (m2, g) => { (var data, var f) = m2; return(new Member2 <R>(data, x => g(f(x)))); }; return(instruction switch { Member1 <T> m1 => mapM1(m1, f), Member2 <T> m2 => mapM2(m2, f), _ => default });
public static void Deconstruct <T>(this Member1 <T> m1, out string data, out Func <int, T> f) { data = m1.Data; f = m1.F; }