Scala 属高级类型 class Toto[F[]]() val ToToTos:Seq[ToToTo[]]=Seq(新Toto[Future[]],新Toto[IO[]]) :12:错误:$1不接受类型参数,应为:一个 val TOTOTOS:Seq[Toto[\u]]=??? ^

Scala 属高级类型 class Toto[F[]]() val ToToTos:Seq[ToToTo[]]=Seq(新Toto[Future[]],新Toto[IO[]]) :12:错误:$1不接受类型参数,应为:一个 val TOTOTOS:Seq[Toto[\u]]=??? ^,scala,types,existential-type,higher-kinded-types,Scala,Types,Existential Type,Higher Kinded Types,我们如何使用通配符来表示更高级的类型? 我只想要一个Seq或Toto,无论F是什么。如果您可以将Toto更改为协变,则以下操作可能有效: class Toto[F[_]]() val totos: Seq[Toto[_]] = Seq(new Toto[Future[_]], new Toto[IO[_]]) <console>:12: error: _$1 takes no type parameters, expected: one val totos: Seq[T

我们如何使用通配符来表示更高级的类型?

我只想要一个
Seq
Toto
,无论
F
是什么。

如果您可以将
Toto
更改为协变,则以下操作可能有效:

class Toto[F[_]]()
val totos: Seq[Toto[_]] = Seq(new Toto[Future[_]], new Toto[IO[_]])
<console>:12: error: _$1 takes no type parameters, expected: one
       val totos: Seq[Toto[_]] = ???
                           ^
感觉很像

如果在代码中经常出现这种情况,您也可以考虑通过将代码转换为<代码> TOTO > <代码>:< /p>,将其移动为<代码> f>代码>
import language.higherKinds

class Toto[+F[_]]()

class Foo[X]
class Bar[X]

val toto: Toto[F] forSome { type F[X] } = new Toto[Foo]
val totos = Seq[Toto[F] forSome { type F[X] }](new Toto[Foo], new Toto[Bar])
import language.higherKinds

class Toto {
  type F[X]
}

object Toto {
  def empty[A[X]]: Toto = new Toto {
    type F[X] = A[X]
  }
}

class Foo[X]
class Bar[X]

val totos: Seq[Toto] = Seq(Toto.empty[Foo], Toto.empty[Bar])