We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 1d5a2c4 commit 28a695eCopy full SHA for 28a695e
library/src/scala/Tuple.scala
@@ -109,18 +109,18 @@ object Tuple {
109
}
110
111
/** Fold a tuple `(T1, ..., Tn)` into `F[T1, F[... F[Tn, Z]...]]]` */
112
- type Fold[T <: Tuple, Z, F[_, _]] = T match
+ type Fold[Tup <: Tuple, Z, F[_, _]] = Tup match
113
case EmptyTuple => Z
114
case h *: t => F[h, Fold[t, Z, F]]
115
116
/** Converts a tuple `(T1, ..., Tn)` to `(F[T1], ..., F[Tn])` */
117
- type Map[Tup <: Tuple, F[_]] <: Tuple = Tup match {
+ type Map[Tup <: Tuple, F[_ <: Union[Tup]]] <: Tuple = Tup match {
118
case EmptyTuple => EmptyTuple
119
case h *: t => F[h] *: Map[t, F]
120
121
122
/** Converts a tuple `(T1, ..., Tn)` to a flattened `(..F[T1], ..., ..F[Tn])` */
123
- type FlatMap[Tup <: Tuple, F[_] <: Tuple] <: Tuple = Tup match {
+ type FlatMap[Tup <: Tuple, F[_ <: Union[Tup]] <: Tuple] <: Tuple = Tup match {
124
125
case h *: t => Concat[F[h], FlatMap[t, F]]
126
tests/pos/i12645.scala
@@ -0,0 +1,11 @@
1
+case class TBox[A <: Tuple](v: A)
2
+case class IBox[A <: Int](v: A)
3
+
4
+@main def m =
5
+ val t: TBox[EmptyTuple] = TBox(EmptyTuple)
6
+ val tt: Tuple.Map[(EmptyTuple, EmptyTuple), TBox] = (TBox(EmptyTuple), TBox(EmptyTuple))
7
8
+ val tt2: Tuple.Map[(1, 2), IBox] = (IBox(1), IBox(2))
9
10
+ type F[X] = (X, X)
11
+ val tt3: Tuple.FlatMap[(1, 2), F] = (1, 1, 2, 2)
0 commit comments