Skip to content

Commit 41238f4

Browse files
committed
Introduce Tuple.ReverseOnto and use it in Tuple.reverse
1 parent d96e9e4 commit 41238f4

File tree

2 files changed

+9
-14
lines changed

2 files changed

+9
-14
lines changed

library/src/scala/Tuple.scala

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -202,16 +202,13 @@ object Tuple {
202202

203203
/** Type of the reversed tuple */
204204
@experimental
205-
type Reverse[X <: Tuple] = Helpers.ReverseImpl[EmptyTuple, X]
205+
type Reverse[X <: Tuple] = ReverseOnto[X, EmptyTuple]
206206

207+
/** Prepends all elements of a tuple in reverse order onto the other tuple */
207208
@experimental
208-
object Helpers:
209-
210-
/** Type of the reversed tuple */
211-
@experimental
212-
type ReverseImpl[Acc <: Tuple, X <: Tuple] <: Tuple = X match
213-
case x *: xs => ReverseImpl[x *: Acc, xs]
214-
case EmptyTuple => Acc
209+
type ReverseOnto[From <: Tuple, To <: Tuple] <: Tuple = From match
210+
case x *: xs => ReverseOnto[xs, x *: To]
211+
case EmptyTuple => To
215212

216213
/** Transforms a tuple `(T1, ..., Tn)` into `(T1, ..., Ti)`. */
217214
type Take[T <: Tuple, N <: Int] <: Tuple = N match {

tests/run-tasty-inspector/stdlibExperimentalDefinitions.scala

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,10 @@ val experimentalDefinitionInLibrary = Set(
9292
"scala.quoted.Quotes.reflectModule.TermParamClauseMethods.hasErasedArgs",
9393

9494
// New feature: reverse method on Tuple
95-
"scala.Tuple.reverse",
96-
"scala.Tuple$.Helpers",
97-
"scala.Tuple$.Helpers$",
98-
"scala.Tuple$.Helpers$.ReverseImpl",
99-
"scala.Tuple$.Reverse",
100-
"scala.runtime.Tuples$.reverse"
95+
"scala.Tuple.reverse", // can be stabilized in 3.4
96+
"scala.Tuple$.Reverse", // can be stabilized in 3.4
97+
"scala.Tuple$.ReverseOnto", // can be stabilized in 3.4
98+
"scala.runtime.Tuples$.reverse", // can be stabilized in 3.4
10199
)
102100

103101

0 commit comments

Comments
 (0)