diff --git a/Funcky/Extensions/EnumeratorExtensions.cs b/Funcky/Extensions/EnumeratorExtensions.cs
new file mode 100644
index 00000000..05db4e63
--- /dev/null
+++ b/Funcky/Extensions/EnumeratorExtensions.cs
@@ -0,0 +1,12 @@
+namespace Funcky.Extensions;
+
+public static class EnumeratorExtensions
+{
+ /// Advances the enumerator and returns Some with new element of enumeration
+ /// or if no more elements are available.
+ public static Option MoveNextOrNone(this IEnumerator enumerator)
+ where T : notnull
+ => enumerator.MoveNext()
+ ? enumerator.Current
+ : Option.None;
+}
diff --git a/Funcky/PublicAPI.Unshipped.txt b/Funcky/PublicAPI.Unshipped.txt
index ec095891..b6f13844 100644
--- a/Funcky/PublicAPI.Unshipped.txt
+++ b/Funcky/PublicAPI.Unshipped.txt
@@ -1,4 +1,5 @@
#nullable enable
+Funcky.Extensions.EnumeratorExtensions
Funcky.Monads.Either.InspectLeft(System.Action! inspector) -> Funcky.Monads.Either
Funcky.Monads.Either.OrElse(Funcky.Monads.Either fallback) -> Funcky.Monads.Either
Funcky.Monads.Either.OrElse(System.Func>! fallback) -> Funcky.Monads.Either
@@ -8,3 +9,4 @@ Funcky.Monads.Result.GetOrElse(TValidResult fallback) -> TValidRes
Funcky.Monads.Result.InspectError(System.Action! inspector) -> Funcky.Monads.Result
Funcky.Monads.Result.OrElse(Funcky.Monads.Result fallback) -> Funcky.Monads.Result
Funcky.Monads.Result.OrElse(System.Func>! fallback) -> Funcky.Monads.Result
+static Funcky.Extensions.EnumeratorExtensions.MoveNextOrNone(this System.Collections.Generic.IEnumerator! enumerator) -> Funcky.Monads.Option