Skip to content

Commit e936805

Browse files
Add regression test for #23616 (#23623)
1 parent 048ce6b commit e936805

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

tests/pos/i23616.scala

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
trait Apply[F[_]]:
2+
extension [A](fa: F[A])
3+
def map[B](f: A => B): F[B]
4+
def map2[B, Z](fb: F[B])(f: (A, B) => Z): F[Z] = ???
5+
6+
private case class IsMap[T <: Tuple](value: Tuple.Map[T, F])
7+
private inline def tupledGeneric[T <: Tuple](tuple: Tuple.Map[T, F]): F[T] =
8+
inline IsMap(tuple) match
9+
case t: IsMap[h *: EmptyTuple] => t.value.head.map(_ *: EmptyTuple)
10+
case t: IsMap[h *: t] =>
11+
val head = t.value.head
12+
val tail = tupledGeneric(t.value.tail)
13+
head.map2(tail)(_ *: _)
14+
15+
trait Monad[F[_]] extends Apply[F]:
16+
extension [A](fa: F[A]) def flatMap[B](f: A => F[B]): F[B]
17+
extension [A](fa: F[A]) override def map[B](f: A => B): F[B] = ???
18+
19+
opaque type Kleisli[F[_], A, B] = A => F[B]
20+
given [F[_], A](using F: Monad[F]): Monad[[B] =>> Kleisli[F, A, B]] with
21+
extension [B](k: Kleisli[F, A, B])
22+
def flatMap[C](f: B => Kleisli[F, A, C]) = ???

0 commit comments

Comments
 (0)