Scala: экзистенциальные типы для карты

Я хочу использовать карту разных типов на неизвестном A:

val map: Map[Foo[A], Bar[A]] = ...
...
val foo = new Foo[Qux]
val bar: Bar[Qux] = map(foo)

Это не работает, потому что A неизвестно. Вместо этого я должен определить это как:

val map: Map[Foo[_], Bar[_]] = ...
...
val foo = new Foo[Qux]
val bar: Bar[Qux] = map(foo).asInstanceOf[Bar[Qux]]

Это работает, но приведение некрасиво. Я лучше найду способ получше. Я так понимаю, ответ - использовать экзистенциальные типы с ключевым словом forSome , но я не понимаю, как это работает. Должен быть:

Map[Foo[A], Bar[A]] forSome { type A }

или:

Map[Foo[A] forSome { type A }, Bar[A]]

или:

Map[Foo[A forSome { type A }], Bar[A]]
5
задан Marcus Downing 12 August 2011 в 10:19
поделиться