From 5368157c0200ee03c605b999e27003d727219605 Mon Sep 17 00:00:00 2001 From: Tom Grigg Date: Tue, 20 Oct 2020 19:13:58 -0700 Subject: [PATCH] Fix #8927: Add regression test Fixed by 65dbc1b in #9789 --- tests/pos/i8927.scala | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 tests/pos/i8927.scala diff --git a/tests/pos/i8927.scala b/tests/pos/i8927.scala new file mode 100644 index 000000000000..9734fe577c53 --- /dev/null +++ b/tests/pos/i8927.scala @@ -0,0 +1,23 @@ +import scala.language.implicitConversions + +trait Eq[k <: AnyKind, K[_ <: k]]: + extension [A <: k, B <: k](k: K[A]) def isEq (k2: K[B]): Eq.GEQ[k, K, A, B] + +object Eq: + enum GEQ[k <: AnyKind, K[_ <: k], A <: k, B <: k]: + case Y[k <: AnyKind, K[_ <: k], A <: k](res: K[A]) extends GEQ[k, K, A, A] + case N() + +sealed trait DPair[k <: AnyKind, K[_ <: k], +V[_ <: k]]: + type A <: k + val key: K[A] + val value: V[A] + final def extract[B <: k](k: K[B])(using Eq[k, K]): Option[V[B]] = key isEq k match + case y: Eq.GEQ.Y[k, K, A] => Some(value) + case _ => None + +object DPair: + given pair [k, K[_ <: k], V[_ <: k], C <: k] as Conversion[(K[C], V[C]), DPair[k, K, V]] = tup => + case class dpair(key: K[C], value: V[C]) extends DPair[k, K, V]: + type A = C + dpair(tup._1, tup._2)