public List <A> TakeWhile(Func <A, bool> p) { return(e ? this : p(UnsafeHead) ? UnsafeHead + UnsafeTail.TakeWhile(p) : List <A> .Empty); }
public List <A> Drop(int n) { return(n <= 0 ? this : e ? List <A> .Empty : UnsafeTail.Drop(n - 1)); }
public List <C> ZipWith <B, C>(List <B> bs, Func <A, Func <B, C> > f) => IsEmpty && bs.IsEmpty ? List <C> .Empty : f(UnsafeHead)(bs.UnsafeHead) + UnsafeTail.ZipWith(bs.UnsafeTail, f);
public List <A> Drop(int n) => n <= 0 ? this : e ? List <A> .Empty : UnsafeTail.Drop(n - 1);
public List <A> Take(int n) => n <= 0 || e ? List <A> .Empty : UnsafeHead + UnsafeTail.Take(n - 1);
public B FoldRight <B>(Func <A, B, B> f, B b) => e ? b : f(UnsafeHead, UnsafeTail.FoldRight(f, b));
public List <A> Take(int n) { return(n <= 0 || e ? List <A> .Empty : UnsafeHead + UnsafeTail.Take(n - 1)); }