Scala 3. Тип полиморфизма и тип AnyKind - любой пример кода?

Scala3 поддерживает «видовой полиморфизм». В документах также упоминается тип:

AnyKind играет особую роль в системе подтипов Scala: это супертип всех других типов, независимо от их типа.

Вопрос:

  • может ли кто-нибудь привести пример рабочего кода, какAnyKindуниверсальность полезна?

(на удивление пока не могу найти полезных примеров)

документы

1 ответ

для интересующихся пример.

Я нашел простой, но понятный код в базе кода Dotty . Смотри какfooпринимает аргумент полиморфного вида (любого порядка):

      
case class Bar[A](a: A)

trait Toto[A, B]

trait Foo[T <: AnyKind] {
  type Out;

  def id(t: Out): Out = t
}

object Foo {
  implicit def foo0[T]: Foo[T] {type Out = T} = new Foo[T] {
    type Out = T
  }

  implicit def foo1[T[_]]: Foo[T] {type Out = T[Any]} = new Foo[T] {
    type Out = T[Any]
  }

  implicit def foo2[T[_, _]]: Foo[T] {type Out = T[Any, Any]} = new Foo[T] {
    type Out = T[Any, Any]
  }
}

def foo[T <: AnyKind](implicit f: Foo[T]): f.type = f

foo[Int].id(23) == 23

foo[List].id(List[Any](1, 2, 3)) ==
  List(1, 2, 3)

foo[Map].id(Map[Any, Any](
  1 -> "toto",
  2 -> "tata",
  3 -> "tutu")) ==
  Map(
    1 -> "toto",
    2 -> "tata",
    3 -> "tutu")
Другие вопросы по тегам