public static Tuple <IEnumerable <T>, IEnumerable <T> > Fork <T>(this IEnumerable <T> input) { var cachedInput = SeqModule.Cache(input); return(Tuple.Create( cachedInput.Where((val, idx) => idx % 2 == 0), cachedInput.Where((val, idx) => idx % 2 == 1))); }