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