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