簡単な例を次に示します。
trait Proposition[T] {
type Repr = T
}
trait Scope {
type OUT
type Consequent = Proposition[_ <: OUT]
abstract class Proof[-I, +P <: Consequent] {
final def instanceFor(v: I): P#Repr = ???
final def apply(v: I): P#Repr = instanceFor(v)
}
}
これにより、コンパイルエラーが発生します。
[Error] ....scala:44: type mismatch;
found : _$1(in type Consequent)
required: (some other)_$1(in type Consequent)
これはどこ(some other)
から来たのですか?型選択の明確なルール (理論的には scala 3 で解決されるはず) によって引き起こされるコンパイラのバグですか?
更新 1申し訳ありませんP#Repr
が、 を型選択と呼ぶべきではないことに気付きました。これはval p: P;p.Repr
、 のみを参照する必要があります。
この文法の名前も知らないけど、ずっと使い続けてきた
DOT計算でも定義されていません。だからscala 3のサポートは疑わしい