diff --git a/arrow-libs/core/arrow-core/api/arrow-core.api b/arrow-libs/core/arrow-core/api/arrow-core.api
index 54eaa80bfe4..7407e7283cc 100644
--- a/arrow-libs/core/arrow-core/api/arrow-core.api
+++ b/arrow-libs/core/arrow-core/api/arrow-core.api
@@ -743,6 +743,10 @@ public final class arrow/core/NonEmptyList$Companion {
public final class arrow/core/NonEmptyListKt {
public static final fun compareTo (Larrow/core/NonEmptyList;Larrow/core/NonEmptyList;)I
public static final fun flatten (Larrow/core/NonEmptyList;)Larrow/core/NonEmptyList;
+ public static final fun max (Larrow/core/NonEmptyList;)Ljava/lang/Comparable;
+ public static final fun maxBy (Larrow/core/NonEmptyList;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
+ public static final fun min (Larrow/core/NonEmptyList;)Ljava/lang/Comparable;
+ public static final fun minBy (Larrow/core/NonEmptyList;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
public static final fun nel (Ljava/lang/Object;)Larrow/core/NonEmptyList;
public static final fun nonEmptyListOf (Ljava/lang/Object;[Ljava/lang/Object;)Larrow/core/NonEmptyList;
public static final fun sequence (Larrow/core/NonEmptyList;)Larrow/core/Either;
diff --git a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/NonEmptyList.kt b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/NonEmptyList.kt
index 123f6b19ac6..80e58e68eb1 100644
--- a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/NonEmptyList.kt
+++ b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/NonEmptyList.kt
@@ -396,6 +396,18 @@ public operator fun > NonEmptyList.compareTo(other: NonEmpt
public fun NonEmptyList>.flatten(): NonEmptyList =
this.flatMap(::identity)
+public inline fun > NonEmptyList.minBy(selector: (A) -> B): A =
+ minByOrNull(selector)!!
+
+public inline fun > NonEmptyList.maxBy(selector: (A) -> B): A =
+ maxByOrNull(selector)!!
+
+public inline fun > NonEmptyList.min(): T =
+ minOrNull()!!
+
+public inline fun > NonEmptyList.max(): T =
+ maxOrNull()!!
+
public fun NonEmptyList>.unzip(): Pair, NonEmptyList> =
this.unzip(::identity)
diff --git a/arrow-libs/core/arrow-core/src/commonTest/kotlin/arrow/core/NonEmptyListTest.kt b/arrow-libs/core/arrow-core/src/commonTest/kotlin/arrow/core/NonEmptyListTest.kt
index 96d6e0eec39..1d748c1b93c 100644
--- a/arrow-libs/core/arrow-core/src/commonTest/kotlin/arrow/core/NonEmptyListTest.kt
+++ b/arrow-libs/core/arrow-core/src/commonTest/kotlin/arrow/core/NonEmptyListTest.kt
@@ -267,5 +267,46 @@ class NonEmptyListTest : UnitSpec() {
result shouldBe expected
}
}
+
+ "max element" {
+ checkAll(
+ Arb.nonEmptyList(Arb.int())
+ ) { a ->
+ val result = a.max()
+ val expected = a.maxOrNull()
+ result shouldBe expected
+ }
+ }
+
+ "maxBy element" {
+ checkAll(
+ Arb.nonEmptyList(Arb.int())
+ ) { a ->
+ val result = a.maxBy(::identity)
+ val expected = a.maxByOrNull(::identity)
+ result shouldBe expected
+ }
+ }
+
+ "min element" {
+ checkAll(
+ Arb.nonEmptyList(Arb.int())
+ ) { a ->
+ val result = a.min()
+ val expected = a.minOrNull()
+ result shouldBe expected
+ }
+ }
+
+
+ "minBy element" {
+ checkAll(
+ Arb.nonEmptyList(Arb.int())
+ ) { a ->
+ val result = a.minBy(::identity)
+ val expected = a.minByOrNull(::identity)
+ result shouldBe expected
+ }
+ }
}
}