private static void Skip(ref IEnumerableContext <T> context, out Option <T> next)
        {
            context.bd.DetectBacktrack();

            if (context.enumerator.MoveNext())
            {
                next = new Option <T>(context.enumerator.Current);
            }
            else
            {
                next = new Option <T>();
                context.bd.Release();
                context.enumerator.Dispose();
            }
        }
 private static void Dispose(ref IEnumerableContext <T> context, out Option <T> next)
 {
     next = new Option <T>();
     context.bd.Release();
     context.enumerator.Dispose();
 }
 private static void Remove(ref IEnumerableContext <T> context, out Option <T> next)
 {
     throw new NotSupportedException();
 }