static Option <TResult> ElementAtAt <TEnumerable, TEnumerator, TSource, TResult, TSelector>(this TEnumerable source, int index, TSelector selector) where TEnumerable : IValueReadOnlyCollection <TSource, TEnumerator> where TEnumerator : struct, IEnumerator <TSource> where TSelector : struct, IFunction <TSource, int, TResult> => index < source.Count ? ValueEnumerableExtensions.ElementAtAt <TEnumerable, TEnumerator, TSource, TResult, TSelector>(source, index, selector) : Option.None;