public override Seq <A> Skip(int count) { if (count == 0) { return(this); } if (count == 1) { return(Tail); } Seq <A> current = this; while (!current.IsEmpty) { if (current.IsTerminator && !ReferenceEquals(current, this)) { return(current.Skip(count)); } current = current.Tail; count--; if (count == 0) { return(current); } } return(Empty); }
public ISeqInternal <A> Cons(A value) { var head = ms.Head.Cons(value); return(new SeqConcat <A>(head.Cons(ms.Skip(1)))); }
public static Seq <T> append <T>(Seq <T> x, Seq <Seq <T> > xs) => headOrNone(xs).IsNone ? x : append(x, append(xs.Head, xs.Skip(1)));