public static TResult With <TSource, TResult> (this TSource self, Func <TSource, TResult> selector) { // Permit self to be null Check.Selector(selector); return(selector(self)); }
public static Maybe<TResult> Select<TSource, TResult>(this Maybe<TSource> self, Func<TSource, TResult> selector) { Check.Selector (selector); if (!self.HasValue) return Maybe<TResult>.Nothing; return selector (self.Value).ToMaybe (); }
public static Maybe<TResult> SelectMany<TSource, TCollection, TResult>(this Maybe<TSource> self, Func<TSource, Maybe<TCollection>> selector, Func<TSource, TCollection, TResult> resultSelector) { Check.Selector (selector); Check.ResultSelector (resultSelector); if (!self.HasValue) return Maybe<TResult>.Nothing; Maybe<TCollection> n = selector (self.Value); if (!n.HasValue) return Maybe<TResult>.Nothing; return resultSelector(self.Value, n.Value).ToMaybe (); }
public static string Implode <TSource> (this IEnumerable <TSource> self, string separator, Func <TSource, string> selector) { Check.Self(self); Check.Selector(selector); var c = self as ICollection <TSource>; string[] values = new string [c != null ? c.Count : 10]; int i = 0; foreach (var e in self) { if (values.Length == i) { Array.Resize(ref values, i * 2); } values [i++] = selector(e); } if (i < values.Length) { Array.Resize(ref values, i); } return(string.Join(separator, values)); }
public static IEnumerable <TResult> GenerateReverse <TSource, TResult> (TSource value, Func <TSource, Maybe <Tuple <TResult, TSource> > > selector) { Check.Selector(selector); return(CreateGenerateReverseIterator(value, selector)); }
public static IEnumerable <TSource> Iterate <TSource> (TSource value, Func <TSource, TSource> selector) { Check.Selector(selector); return(CreateIterateIterator(value, selector)); }