public IPair <S1, S2> If(IPair <E1, E2> toEval, IPair <S1, S2> ifTrue) { return(new Pair <S1, S2>(Factory1.If(toEval.Item1, ifTrue.Item1), Factory2.If(toEval.Item2, ifTrue.Item2))); }