関数リテラルがあります
{case QualifiedType(preds, ty) =>
t.ty = ty ;
Some((emptyEqualityConstraintSet,preds)) }
エラーメッセージが表示される
missing parameter type for expanded function The argument types of an anonymous function
must be fully known. (SLS 8.5) Expected type was:
? => Option[(Typer.this.EqualityConstraintSet, Typer.this.TypeRelationSet)]
SLS 8.5を調べましたが、説明が見つかりませんでした。
関数を自分で展開すると
{(qt : QualifiedType) =>
qt match {case QualifiedType(preds, ty) =>
t.ty = ty ;
Some((emptyEqualityConstraintSet,preds)) }}
エラーはなくなります。
(a) なぜこれがエラーなのですか?
(b) どうすれば修正できますか?
: QualifiedType
パターンと => の間に追加するという明らかな修正を試みましたが、これは構文エラーです。
私が気づいたことの 1 つは、コンテキストが違いを生むということです。関数リテラルを、期待されると宣言された関数の引数として使用すると、QualifiedType => B
エラーは発生しません。しかし、 を期待する関数の引数として使用するとA => B
、エラーが発生します。ここで起こっていることは、型が QualifiedType のスーパータイプであるオブジェクトにパターンが適用される可能性があるため、関数が適用されないという保証がなければ、コンパイラは明らかな型を割り当てようとしないということです。 QualifiedType ではないもの。本当に私が望んでいるのは{QualifiedType( preds, ty) => ...}
、Haskell の\QualifiedType(preds,ty) -> ...
.