public static FuncyList <T> Take <T>(this FuncyList <T> source, int count) { if (source.IsNil || count <= 0) { return(FuncyList <T> .Nil()); } return(FuncyList <T> .Construct(((IEnumerable <T>)source).Take <T>(count).ToArray())); }
public FuncyList <TReturn> Apply <TReturn>(FuncyList <Func <T, TReturn> > f) { if (f.IsCons) { return(FuncyList <TReturn> .Construct(f.ToList().SelectMany(fCons => this.FMap(fCons)).ToArray())); } else { return(FuncyList <TReturn> .Nil()); } }
public static Maybe <T> First <T>(this FuncyList <T> source) { if (source.IsNil) { return(Maybe <T> .None()); } else { return(Maybe <T> .Some(source.ToCons().Head)); } }
public static Maybe <T> Last <T>(this FuncyList <T> source) { if (source.IsNil) { return(Maybe <T> .None()); } else { return(Maybe <T> .Some(((IEnumerable <T>)source).Last())); } }
public static FuncyList <T> Construct(params T[] args) { FuncyList <T> result = FuncyList <T> .Nil(); for (int i = args.Length - 1; i >= 0; i--) { result = FuncyList <T> .Cons(args[i], result); } return(result); }
public static Maybe <T> ElementAt <T>(this FuncyList <T> source, int index) { if (source is Nil <T> ) { return(Maybe <T> .None()); } if (index < 0) { return(Maybe <T> .None()); } if (index >= source.Count()) { return(Maybe <T> .None()); } return(Maybe <T> .Some(((IEnumerable <T>)source).ElementAt(index))); }
public static FuncyList <T> ToFuncyList <T>(this NonEmptyList <T> self) { return(FuncyList <T> .Construct(self.ToArray())); }
public override FuncyList <TReturn> ComputeWith <TReturn>(Func <T, FuncyList <TReturn> > f) { return(FuncyList <TReturn> .Nil()); }
public override FuncyList <TReturn> FMap <TReturn>(Func <T, TReturn> f) { return(FuncyList <TReturn> .Nil()); }
public override FuncyList <TReturn> ComputeWith <TReturn>(Func <T, FuncyList <TReturn> > f) { return(FuncyList <TReturn> .Construct(this.SelectMany(h => f(h)).ToArray())); }
public override FuncyList <TReturn> FMap <TReturn>(Func <T, TReturn> f) { return(FuncyList <TReturn> .Cons(f(this.head), this.tail.FMap(f))); }
public Cons(T head, FuncyList <T> tail) { this.head = head; this.tail = tail; }
public static FuncyList <T> Cons(T head, FuncyList <T> tail) { return(new Cons <T>(head, tail)); }
public FuncyList <T> Point(T value) { return(FuncyList <T> .Construct(value)); }
public FuncyList <TReturn> ApplyRight <TReturn>(FuncyList <TReturn> other) { return(other); }
public FuncyList <T> ApplyLeft <TReturn>(FuncyList <TReturn> other) { return(this); }