У меня есть черта типа
trait T{
type F[_]
def get[A](f: F[A]): A
}
Но я не могу ее реализовать
type Id[+A] = A // same as shapeless Id
object O extends T{
type F[_] = Id[_]
def get[A](f: F[A]): A = f //
}
// error: type mismatch;
// found : f.type (with underlying type O.F[A])
// required: A
// def get[A](f: F[A]): A = f
// ^
(заметьте, я думаю, что мне следует работать, если я разыграю f.asIntanceOf[A]
, но я не пытался)
У меня та же проблема с Future:
import scala.concurrent.Await
import scala.concurrent.Future
import scala.concurrent.duration.Duration
object O2 extends T{
type F[_] = Future[_]
def get[A](f: F[A]): A = Awaits.result(f, Duration.Inf)
}
// error: type mismatch;
// found : scala.concurrent.Future[_$1] where type _$1
// required: scala.concurrent.Awaitable[A]
// def get[A](f: F[A]): A = Await.result(f, Duration.Inf)
// ^
Может кто-нибудь объяснить мне, что происходит?Почему компилятор не может понять фактический тип F[A]
использует псевдоним вышеупомянутого типа?