From 9e720cd48e2e02983c70b6d50f3412ea6b3b60c2 Mon Sep 17 00:00:00 2001 From: Wojciech Mazur Date: Tue, 29 Jul 2025 09:18:53 +0200 Subject: [PATCH] Add regression test for #23616 --- tests/pos/i23616.scala | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 tests/pos/i23616.scala diff --git a/tests/pos/i23616.scala b/tests/pos/i23616.scala new file mode 100644 index 000000000000..48f91d8cd77f --- /dev/null +++ b/tests/pos/i23616.scala @@ -0,0 +1,22 @@ +trait Apply[F[_]]: + extension [A](fa: F[A]) + def map[B](f: A => B): F[B] + def map2[B, Z](fb: F[B])(f: (A, B) => Z): F[Z] = ??? + + private case class IsMap[T <: Tuple](value: Tuple.Map[T, F]) + private inline def tupledGeneric[T <: Tuple](tuple: Tuple.Map[T, F]): F[T] = + inline IsMap(tuple) match + case t: IsMap[h *: EmptyTuple] => t.value.head.map(_ *: EmptyTuple) + case t: IsMap[h *: t] => + val head = t.value.head + val tail = tupledGeneric(t.value.tail) + head.map2(tail)(_ *: _) + +trait Monad[F[_]] extends Apply[F]: + extension [A](fa: F[A]) def flatMap[B](f: A => F[B]): F[B] + extension [A](fa: F[A]) override def map[B](f: A => B): F[B] = ??? + +opaque type Kleisli[F[_], A, B] = A => F[B] +given [F[_], A](using F: Monad[F]): Monad[[B] =>> Kleisli[F, A, B]] with + extension [B](k: Kleisli[F, A, B]) + def flatMap[C](f: B => Kleisli[F, A, C]) = ??? \ No newline at end of file