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")