public Option <T> MoveNext() { if (source.HasNoMoreElements()) { return(new Empty <T>()); } else { var current = source.GetCurrent(); source.MoveToNextElement(); return(new NonEmpty <T>() { Value = current }); } }