Skip to content
This repository has been archived by the owner on Feb 24, 2021. It is now read-only.

Deprecate extensions methods for Sequence and SequenceK #88

Merged
merged 4 commits into from Jan 15, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -0,0 +1,46 @@
package arrow.optics.extensions.sequence.each

import arrow.core.SequenceK
import arrow.optics.PTraversal
import arrow.optics.extensions.SequenceKEach

@JvmName("each")
@Suppress(
"UNCHECKED_CAST",
"USELESS_CAST",
"EXTENSION_SHADOWED_BY_MEMBER",
"UNUSED_PARAMETER"
)
@Deprecated(
"Each is being deprecated. Use the instance for Sequence from Traversal's companion object instead.",
ReplaceWith(
"Traversal.sequence<A>()",
"arrow.optics.Traversal", "arrow.optics.sequence"),
DeprecationLevel.WARNING
)
fun <A> each(): PTraversal<SequenceK<A>, SequenceK<A>, A, A> =
arrow.optics.extensions.sequence.each.Sequence
.each<A>()
.each() as arrow.optics.PTraversal<arrow.core.SequenceK<A>, arrow.core.SequenceK<A>, A, A>

/**
* cached extension
*/
@PublishedApi()
internal val each_singleton: SequenceKEach<Any?> = object : SequenceKEach<Any?> {}

@Deprecated("Receiver Sequence object is deprecated, and it will be removed in 0.13.")
object Sequence {
@Suppress(
"UNCHECKED_CAST",
"NOTHING_TO_INLINE"
)
@Deprecated(
"Each is being deprecated. Use the instance for Sequence from Traversal's companion object instead.",
ReplaceWith(
"Traversal.sequence<A>()",
"arrow.optics.Traversal", "arrow.optics.sequence"),
DeprecationLevel.WARNING
)
inline fun <A> each(): SequenceKEach<A> = each_singleton as
arrow.optics.extensions.SequenceKEach<A>}
@@ -0,0 +1,49 @@
package arrow.optics.extensions.sequence.filterIndex

import arrow.core.SequenceK
import arrow.optics.PTraversal
import arrow.optics.extensions.SequenceKFilterIndex

@JvmName("filter")
@Suppress(
"UNCHECKED_CAST",
"USELESS_CAST",
"EXTENSION_SHADOWED_BY_MEMBER",
"UNUSED_PARAMETER"
)
@Deprecated(
"arrow.optics.extensions package is being deprecated. Use the exposed function in the instance for Sequence from the companion object of the typeclass instead.",
ReplaceWith(
"FilterIndex.sequence<A>().filter(p)",
"arrow.optics.sequence", "arrow.optics.typeclasses.FilterIndex"
),
DeprecationLevel.WARNING
)
fun <A> filter(p: Function1<Int, Boolean>): PTraversal<SequenceK<A>, SequenceK<A>, A, A> =
arrow.optics.extensions.sequence.filterIndex.Sequence
.filterIndex<A>()
.filter(p) as arrow.optics.PTraversal<arrow.core.SequenceK<A>, arrow.core.SequenceK<A>, A, A>

/**
* cached extension
*/
@PublishedApi()
internal val filterIndex_singleton: SequenceKFilterIndex<Any?> = object : SequenceKFilterIndex<Any?>
{}

@Deprecated("Receiver Sequence object is deprecated, and it will be removed in 0.13.")
object Sequence {
@Suppress(
"UNCHECKED_CAST",
"NOTHING_TO_INLINE"
)
@Deprecated(
"Typeclass instance have been moved to the companion object of the typeclass.",
ReplaceWith(
"FilterIndex.sequence<A>()",
"arrow.optics.sequence", "arrow.optics.typeclasses.FilterIndex"
),
DeprecationLevel.WARNING
)
inline fun <A> filterIndex(): SequenceKFilterIndex<A> = filterIndex_singleton as
arrow.optics.extensions.SequenceKFilterIndex<A>}
@@ -0,0 +1,69 @@
package arrow.optics.extensions.sequence.index

import arrow.core.SequenceK
import arrow.optics.PLens
import arrow.optics.POptional
import arrow.optics.extensions.SequenceKIndex

@JvmName("index")
@Suppress(
"UNCHECKED_CAST",
"USELESS_CAST",
"EXTENSION_SHADOWED_BY_MEMBER",
"UNUSED_PARAMETER"
)
@Deprecated(
"arrow.optics.extensions package is being deprecated. Use the exposed function in the instance for Sequence from the companion object of the typeclass instead.",
ReplaceWith(
"Index.sequence<A>().index(i)",
"arrow.optics.sequence", "arrow.optics.typeclasses.Index"
),
DeprecationLevel.WARNING
)
fun <A> index(i: Int): POptional<SequenceK<A>, SequenceK<A>, A, A> =
arrow.optics.extensions.sequence.index.Sequence
.index<A>()
.index(i) as arrow.optics.POptional<arrow.core.SequenceK<A>, arrow.core.SequenceK<A>, A, A>

@JvmName("get")
@Suppress(
"UNCHECKED_CAST",
"USELESS_CAST",
"EXTENSION_SHADOWED_BY_MEMBER",
"UNUSED_PARAMETER"
)
@Deprecated(
"arrow.optics.extensions package is being deprecated, and it will be removed in 0.13.",
ReplaceWith(
"this compose Index.sequence<A>().index(i)",
"arrow.optics.compose", "arrow.optics.sequence", "arrow.optics.typeclasses.Index"
),
level = DeprecationLevel.WARNING
)
operator fun <A, T> PLens<T, T, SequenceK<A>, SequenceK<A>>.get(i: Int): POptional<T, T, A, A> =
arrow.optics.extensions.sequence.index.Sequence.index<A>().run {
this@get.get<T>(i) as arrow.optics.POptional<T, T, A, A>
}

/**
* cached extension
*/
@PublishedApi()
internal val index_singleton: SequenceKIndex<Any?> = object : SequenceKIndex<Any?> {}

@Deprecated("Receiver Sequence object is deprecated, and it will be removed in 0.13.")
object Sequence {
@Suppress(
"UNCHECKED_CAST",
"NOTHING_TO_INLINE"
)
@Deprecated(
"Typeclass instance have been moved to the companion object of the typeclass.",
ReplaceWith(
"Index.sequence<A>()",
"arrow.optics.sequence", "arrow.optics.typeclasses.Index"
),
DeprecationLevel.WARNING
)
inline fun <A> index(): SequenceKIndex<A> = index_singleton as
arrow.optics.extensions.SequenceKIndex<A>}
33 changes: 29 additions & 4 deletions arrow-optics/src/main/kotlin/arrow/optics/extensions/sequencek.kt
Expand Up @@ -6,7 +6,6 @@ import arrow.core.k
import arrow.core.left
import arrow.core.right
import arrow.core.toT
import arrow.extension
import arrow.optics.Optional
import arrow.optics.POptional
import arrow.optics.Traversal
Expand All @@ -21,6 +20,13 @@ import arrow.typeclasses.Applicative
* @receiver [SequenceK.Companion] to make it statically available.
* @return [Traversal] with source [SequenceK] and focus in every [A] of the source.
*/
@Deprecated(
"SequenceK is being deprecated. Use the instance for Sequence from the companion object of the typeclass.",
ReplaceWith(
"Traversal.sequence<A>()",
"arrow.optics.Traversal", "arrow.optics.sequence"),
DeprecationLevel.WARNING
)
fun <A> SequenceK.Companion.traversal(): Traversal<SequenceK<A>, A> = object : Traversal<SequenceK<A>, A> {
override fun <F> modifyF(FA: Applicative<F>, s: SequenceK<A>, f: (A) -> Kind<F, A>): Kind<F, SequenceK<A>> =
s.traverse(FA, f)
Expand All @@ -29,7 +35,12 @@ fun <A> SequenceK.Companion.traversal(): Traversal<SequenceK<A>, A> = object : T
/**
* [Each] instance definition for [SequenceK].
*/
@extension
@Deprecated(
"Each is being deprecated. Use the instance for List from Traversal's companion object instead.",
ReplaceWith(
"Traversal.sequence<A>()",
"arrow.optics.Traversal", "arrow.optics.sequence"),
DeprecationLevel.WARNING)
interface SequenceKEach<A> : Each<SequenceK<A>, A> {
override fun each(): Traversal<SequenceK<A>, A> =
SequenceK.traversal()
Expand All @@ -38,7 +49,14 @@ interface SequenceKEach<A> : Each<SequenceK<A>, A> {
/**
* [FilterIndex] instance definition for [SequenceK].
*/
@extension
@Deprecated(
"Typeclass interface implementation will not be exposed directly anymore.",
ReplaceWith(
"FilterIndex.sequence<A>()",
"arrow.optics.map", "arrow.optics.typeclasses.FilterIndex"
),
DeprecationLevel.WARNING
)
interface SequenceKFilterIndex<A> : FilterIndex<SequenceK<A>, Int, A> {
override fun filter(p: (Int) -> Boolean): Traversal<SequenceK<A>, A> = object : Traversal<SequenceK<A>, A> {
override fun <F> modifyF(FA: Applicative<F>, s: SequenceK<A>, f: (A) -> Kind<F, A>): Kind<F, SequenceK<A>> = FA.run {
Expand All @@ -52,7 +70,14 @@ interface SequenceKFilterIndex<A> : FilterIndex<SequenceK<A>, Int, A> {
/**
* [Index] instance definition for [SequenceK].
*/
@extension
@Deprecated(
"Typeclass interface implementation will not be exposed directly anymore.",
ReplaceWith(
"Index.sequence<A>()",
"arrow.optics.map", "arrow.optics.typeclasses.Index"
),
DeprecationLevel.WARNING
)
interface SequenceKIndex<A> : Index<SequenceK<A>, Int, A> {
override fun index(i: Int): Optional<SequenceK<A>, A> = POptional(
getOrModify = { it.elementAtOrNull(i)?.right() ?: it.left() },
Expand Down
@@ -0,0 +1,44 @@
package arrow.optics.extensions.sequencek.each

import arrow.core.SequenceK
import arrow.core.SequenceK.Companion
import arrow.optics.PTraversal
import arrow.optics.extensions.SequenceKEach

/**
* cached extension
*/
@PublishedApi()
internal val each_singleton: SequenceKEach<Any?> = object : SequenceKEach<Any?> {}

@JvmName("each")
@Suppress(
"UNCHECKED_CAST",
"USELESS_CAST",
"EXTENSION_SHADOWED_BY_MEMBER",
"UNUSED_PARAMETER"
)
@Deprecated(
"Each is being deprecated. Use the instance for Sequence from Traversal's companion object instead.",
ReplaceWith(
"Traversal.sequence<A>()",
"arrow.optics.Traversal", "arrow.optics.sequence"),
DeprecationLevel.WARNING
)
fun <A> each(): PTraversal<SequenceK<A>, SequenceK<A>, A, A> = arrow.core.SequenceK
.each<A>()
.each() as arrow.optics.PTraversal<arrow.core.SequenceK<A>, arrow.core.SequenceK<A>, A, A>

@Suppress(
"UNCHECKED_CAST",
"NOTHING_TO_INLINE"
)
@Deprecated(
"Each is being deprecated. Use the instance for Sequence from Traversal's companion object instead.",
ReplaceWith(
"Traversal.sequence<A>()",
"arrow.optics.Traversal", "arrow.optics.sequence"),
DeprecationLevel.WARNING
)
inline fun <A> Companion.each(): SequenceKEach<A> = each_singleton as
arrow.optics.extensions.SequenceKEach<A>
@@ -0,0 +1,48 @@
package arrow.optics.extensions.sequencek.filterIndex

import arrow.core.SequenceK
import arrow.core.SequenceK.Companion
import arrow.optics.PTraversal
import arrow.optics.extensions.SequenceKFilterIndex

/**
* cached extension
*/
@PublishedApi()
internal val filterIndex_singleton: SequenceKFilterIndex<Any?> = object : SequenceKFilterIndex<Any?>
{}

@JvmName("filter")
@Suppress(
"UNCHECKED_CAST",
"USELESS_CAST",
"EXTENSION_SHADOWED_BY_MEMBER",
"UNUSED_PARAMETER"
)
@Deprecated(
"arrow.optics.extensions package is being deprecated. Use the exposed function in the instance for Sequence from the companion object of the typeclass instead.",
ReplaceWith(
"FilterIndex.sequence<A>().filter(p)",
"arrow.optics.sequence", "arrow.optics.typeclasses.FilterIndex"
),
DeprecationLevel.WARNING
)
fun <A> filter(p: Function1<Int, Boolean>): PTraversal<SequenceK<A>, SequenceK<A>, A, A> =
arrow.core.SequenceK
.filterIndex<A>()
.filter(p) as arrow.optics.PTraversal<arrow.core.SequenceK<A>, arrow.core.SequenceK<A>, A, A>

@Suppress(
"UNCHECKED_CAST",
"NOTHING_TO_INLINE"
)
@Deprecated(
"SequenceK is being deprecated. Use the instance for Sequence from the companion object of the typeclass.",
ReplaceWith(
"FilterIndex.sequence<A>()",
"arrow.optics.sequence", "arrow.optics.typeclasses.FilterIndex"
),
DeprecationLevel.WARNING
)
inline fun <A> Companion.filterIndex(): SequenceKFilterIndex<A> = filterIndex_singleton as
arrow.optics.extensions.SequenceKFilterIndex<A>
@@ -0,0 +1,67 @@
package arrow.optics.extensions.sequencek.index

import arrow.core.SequenceK
import arrow.core.SequenceK.Companion
import arrow.optics.PLens
import arrow.optics.POptional
import arrow.optics.extensions.SequenceKIndex

/**
* cached extension
*/
@PublishedApi()
internal val index_singleton: SequenceKIndex<Any?> = object : SequenceKIndex<Any?> {}

@JvmName("index")
@Suppress(
"UNCHECKED_CAST",
"USELESS_CAST",
"EXTENSION_SHADOWED_BY_MEMBER",
"UNUSED_PARAMETER"
)
@Deprecated(
"arrow.optics.extensions package is being deprecated. Use the exposed function in the instance for Sequence from the companion object of the typeclass instead.",
ReplaceWith(
"Index.sequence<A>().index(i)",
"arrow.optics.sequence", "arrow.optics.typeclasses.Index"
),
DeprecationLevel.WARNING
)
fun <A> index(i: Int): POptional<SequenceK<A>, SequenceK<A>, A, A> = arrow.core.SequenceK
.index<A>()
.index(i) as arrow.optics.POptional<arrow.core.SequenceK<A>, arrow.core.SequenceK<A>, A, A>

@JvmName("get")
@Suppress(
"UNCHECKED_CAST",
"USELESS_CAST",
"EXTENSION_SHADOWED_BY_MEMBER",
"UNUSED_PARAMETER"
)
@Deprecated(
"arrow.optics.extensions package is being deprecated, and it will be removed in 0.13.",
ReplaceWith(
"this compose Index.sequence<A>().index(i)",
"arrow.optics.compose", "arrow.optics.sequence", "arrow.optics.typeclasses.Index"
),
level = DeprecationLevel.WARNING
)
operator fun <A, T> PLens<T, T, SequenceK<A>, SequenceK<A>>.get(i: Int): POptional<T, T, A, A> =
arrow.core.SequenceK.index<A>().run {
this@get.get<T>(i) as arrow.optics.POptional<T, T, A, A>
}

@Suppress(
"UNCHECKED_CAST",
"NOTHING_TO_INLINE"
)
@Deprecated(
"SequenceK is being deprecated. Use the instance for Sequence from the companion object of the typeclass.",
ReplaceWith(
"Index.sequence<A>()",
"arrow.optics.sequence", "arrow.optics.typeclasses.Index"
),
DeprecationLevel.WARNING
)
inline fun <A> Companion.index(): SequenceKIndex<A> = index_singleton as
arrow.optics.extensions.SequenceKIndex<A>