public static Union3 <I0, I1, I2> From02(Either <I0, I2> o) => o.Match(From0, From2);
public ProblemQualified <V> SelectMany <U, V>(Func <T, ProblemQualified <U> > tu, Func <T, U, V> tuv) => TerminalOrValue.Match( term => new ProblemQualified <V>(Either <Array1 <string>, V> .FromLeft(term), NonTerminalWarnings), val => tu(val).Let(nq => new ProblemQualified <V>(nq.TerminalOrValue.Map(x => x, x => tuv(val, x)), NonTerminalWarnings.Concat(nq.NonTerminalWarnings))));
public static Union3 <I0, I1, I2> From01(Either <I0, I1> o) => o.Match(From0, From1);