static Option <A> minMax <A, B, Coll>( this Coll c, Fn <A, B> extract, Comparable <B> comparable, CompareResult lookFor ) where Coll : IEnumerable <A> { var current = Option <A> .None; foreach (var a in c) { if (current.isNone) { current = a.some(); } else { if (comparable.compare(extract(a), extract(current.get)) == lookFor) { current = a.some(); } } } return(current); }
public static bool eq <A>(this Comparable <A> cmp, A a1, A a2) => cmp.compare(a1, a2) == CompareResult.EQ;
public static bool gte <A>(this Comparable <A> cmp, A a1, A a2) => cmp.compare(a1, a2) != CompareResult.LT;
public static Comparable <B> comap <A, B>(this Comparable <A> cmp, Fn <B, A> mapper) => Comparable.lambda <B>((b1, b2) => cmp.compare(mapper(b1), mapper(b2)));