と のマッチングを担当する「プロトコルヘルパー」特性を実装しようとしていPrompts
ますResponses
。最終的な目標はobject
、さまざまな Prompt および Response クラスをシールされたトレイトのサブクラスとして定義する を作成し、その Protocol オブジェクトclass
のトレイトに混合する を作成することです。ProtocolSupport
問題は、私の現在のアプローチがコンパイルされないことです。
これが私が持っているものの蒸留版です:
trait Protocol {
type Response
type Prompt <: BasePrompt
trait BasePrompt {
type Data
def validate(response: Response): Validated[Data]
}
}
trait ProtocolSupport[P <: Protocol] {
def foo(prompt: P#Prompt, response: P#Response) = {
// compiler error
prompt.validate(response)
}
}
response
コンパイラは、 への引数として を好まないprompt.validate
:
[error] found : response.type (with underlying type P#Response)
[error] required: _4.Response where val _4: P
[error] prompt.validate(response)
[error] ^
これはあまり役に立ちません..それが欲しいと言っているようですが、それはP.Response
まさに私が与えているものなので、何が問題なのですか?