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 b849f3d5ced..8eca2ccc773 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 @@ -183,9 +183,18 @@ public class NonEmptyList( public override inline fun map(transform: (A) -> B): NonEmptyList = NonEmptyList(transform(head), tail.map(transform)) - override fun flatMap(transform: (A) -> NonEmptyCollection): NonEmptyList = + @Suppress("OVERRIDE_BY_INLINE") + public override inline fun mapIndexed(transform: (index: Int, A) -> B): NonEmptyList = + NonEmptyList(transform(0, head), tail.mapIndexed { ix, e -> transform(ix + 1, e) }) + + @Suppress("OVERRIDE_BY_INLINE") + public override inline fun flatMap(transform: (A) -> NonEmptyCollection): NonEmptyList = transform(head).toNonEmptyList() + tail.flatMap(transform) + @Suppress("OVERRIDE_BY_INLINE") + public override inline fun distinctBy(selector: (A) -> K): NonEmptyList = + all.distinctBy(selector).toNonEmptyListOrNull()!! + public operator fun plus(l: NonEmptyList<@UnsafeVariance A>): NonEmptyList = this + l.all diff --git a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/NonEmptySet.kt b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/NonEmptySet.kt index a510d1c4b79..79d9d5cf34e 100644 --- a/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/NonEmptySet.kt +++ b/arrow-libs/core/arrow-core/src/commonMain/kotlin/arrow/core/NonEmptySet.kt @@ -4,7 +4,7 @@ import kotlin.jvm.JvmInline @JvmInline public value class NonEmptySet private constructor( - private val elements: Set + @PublishedApi internal val elements: Set ) : Set by elements, NonEmptyCollection { public constructor(first: A, rest: Set) : this(setOf(first) + rest) @@ -21,6 +21,25 @@ public value class NonEmptySet private constructor( override fun lastOrNull(): A = elements.last() + @Suppress("OVERRIDE_BY_INLINE") + public override inline fun map(transform: (A) -> B): NonEmptyList = + elements.map(transform).toNonEmptyListOrNull()!! + + @Suppress("OVERRIDE_BY_INLINE") + public override inline fun mapIndexed(transform: (index: Int, A) -> B): NonEmptyList = + elements.mapIndexed(transform).toNonEmptyListOrNull()!! + + @Suppress("OVERRIDE_BY_INLINE") + public override inline fun flatMap(transform: (A) -> NonEmptyCollection): NonEmptyList = + elements.flatMap(transform).toNonEmptyListOrNull()!! + + override fun distinct(): NonEmptyList = + toNonEmptyList() + + @Suppress("OVERRIDE_BY_INLINE") + public override inline fun distinctBy(selector: (A) -> K): NonEmptyList = + elements.distinctBy(selector).toNonEmptyListOrNull()!! + override fun toString(): String = "NonEmptySet(${this.joinToString()})" @Suppress("RESERVED_MEMBER_INSIDE_VALUE_CLASS")