1

と のマッチングを担当する「プロトコルヘルパー」特性を実装しようとしてい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まさに私が与えているものなので、何が問題なのですか?

4

1 に答える 1