是否有可能在Scala中"嘲笑"更高级的类型?

Sco*_*son 21 types scala currying higher-kinded-types kind-projector

让我们假设我有一个具有两个类型参数的特征,例如

trait Qux[A, B]
Run Code Online (Sandbox Code Playgroud)

和另一个具有更高通道类型参数的特征,例如

trait Turkle[C[_]]
Run Code Online (Sandbox Code Playgroud)

我希望能够将一个固定值替换为其中一个类型参数Qux,以便它可以用于参数化Turkle.

这是一个示例(在Scala中没有意义的代码!):

trait Baz[A] extends Turkle[Qux[A, _]]
Run Code Online (Sandbox Code Playgroud)

任何人有任何想法如何实现这种效果?

Lac*_*lan 23

Jason Zaugg想出了最简洁的方法:

trait Baz[A] extends Turkle[({type x[a]=Qux[A, a]})#x]
Run Code Online (Sandbox Code Playgroud)

IntelliJ的Scala插件可以选择将其折叠为:

trait Baz[A] extends Turkle[x[a]=Qux[A, a]]
Run Code Online (Sandbox Code Playgroud)