From c2b7875a03209e4891ca58b0f80d8937ae9b3d97 Mon Sep 17 00:00:00 2001 From: Dale Wijnand Date: Wed, 9 Oct 2024 14:59:42 +0100 Subject: [PATCH 1/2] Allow autotupling if fn's param is a type param --- tests/pos/i21682.1.scala | 15 +++++++++++++++ tests/pos/i21682.2.scala | 7 +++++++ tests/pos/i21682.3.scala | 4 ++++ 3 files changed, 26 insertions(+) create mode 100644 tests/pos/i21682.1.scala create mode 100644 tests/pos/i21682.2.scala create mode 100644 tests/pos/i21682.3.scala diff --git a/tests/pos/i21682.1.scala b/tests/pos/i21682.1.scala new file mode 100644 index 000000000000..7340edcaeb4d --- /dev/null +++ b/tests/pos/i21682.1.scala @@ -0,0 +1,15 @@ +sealed abstract class Gen[+T1] +given [T2]: Conversion[T2, Gen[T2]] = ??? + +trait Show[T3] +given Show[Boolean] = ??? +given [A1: Show, B1: Show, C1: Show]: Show[(A1, B1, C1)] = ??? + +object ForAll: + def apply[A2: Show, B2](f: A2 => B2): Unit = ??? + def apply[A3: Show, B3: Show, C3](f: (A3, B3) => C3): Unit = ??? + def apply[A4: Show, B4](gen: Gen[A4])(f: A4 => B4): Unit = ??? + +@main def Test = + ForAll: (b1: Boolean, b2: Boolean, b3: Boolean) => + ??? diff --git a/tests/pos/i21682.2.scala b/tests/pos/i21682.2.scala new file mode 100644 index 000000000000..6717d36c78a6 --- /dev/null +++ b/tests/pos/i21682.2.scala @@ -0,0 +1,7 @@ +object ForAll: + def apply[A1, B](f: A1 => B): Unit = ??? + def apply[A1, A2, B](f: (A1, A2) => B): Unit = ??? + +@main def Test = + ForAll: (b1: Boolean, b2: Boolean, b3: Boolean) => + ??? diff --git a/tests/pos/i21682.3.scala b/tests/pos/i21682.3.scala new file mode 100644 index 000000000000..b44b9a7c91fc --- /dev/null +++ b/tests/pos/i21682.3.scala @@ -0,0 +1,4 @@ +class Test: + def foo[A1 >: (Nothing, Boolean, Nothing) <: (Any, Boolean, Any), B](f: A1 => B): Unit = ??? + def test(): Unit = + val res4 = this.foo((b1: Boolean, b2: Boolean, b3: Boolean) => ???) From 0895f6d2b56a5289dbb618f659ed8216fa989357 Mon Sep 17 00:00:00 2001 From: Tomasz Godzik Date: Wed, 19 Feb 2025 18:58:21 +0100 Subject: [PATCH 2/2] Allow autotupling if fn's param is a type param [Cherry-picked 9d2aeacae28f970139651240dda8f78bdd86574a][modified]