我有一个函数文字
{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
在模式和 => 之间添加,但这是一个语法错误。
我注意到的一件事是上下文有所不同。如果我使用函数文字作为声明为期望 a 的函数的参数QualifiedType => B
,则没有错误。但是,如果我将它用作期望 a 的函数的参数A => B
,则会出现错误。我希望这里发生的事情是,由于可以想象该模式可以应用于类型是 QualifiedType 的超类型的对象,编译器不愿意在不保证函数不会应用于的情况下分配明显的类型任何不是 QualifiedType 的东西。我真正想要的是能够编写{QualifiedType( preds, ty) => ...}
并使其与 Haskell 具有相同的含义\QualifiedType(preds,ty) -> ...
。