24

たとえば、2 つの型パラメーターを持つトレイトがあるとします。

trait Qux[A, B]

より高次の型パラメーターを持つ別のトレイト、たとえば

trait Turkle[C[_]]

の型パラメータの 1 つを固定値に置き換えて、パラメータ化にQux使用できるようにしたいと考えていますTurkle

以下に例を示します (Scala では意味をなさないコードの例です!):

trait Baz[A] extends Turkle[Qux[A, _]]

この効果を達成する方法はありますか?

4

5 に答える 5

24

Jason Zaugg は、これを行うための最も簡潔な方法を考え出しました。

trait Baz[A] extends Turkle[({type x[a]=Qux[A, a]})#x]

IntelliJ の Scala プラグインは、オプションでこれを次のように折りたたみます。

trait Baz[A] extends Turkle[x[a]=Qux[A, a]]
于 2011-06-06T06:02:15.617 に答える
4

このような意味ですか?

trait QuxWithString[A] extends Qux[A, String]
new Turkle[QuxWithString]{}

これは、型の部分適用に類似しています。

于 2011-06-06T05:19:51.410 に答える
2
trait Turkle[C[_]]
trait Qux[A,B]
trait Wraps[A] {
  type Jkz[X] = Qux[A,X]
  trait Baz extends Turkle[Jkz]
}
于 2011-06-06T05:09:38.113 に答える