Scala 2.8 странная ошибка типа - PullRequest
1 голос
/ 20 мая 2010

Типы:

def radioGroup[T](values: Array[T], textProvider: T => String)(setups:(RadioGroup[T] => Unit)*)(parent: Composite): RadioGroup[T]
def label(setups:(Label => Unit)*)(parent:Composite): Label

def contains(setups : (Composite => Unit)*) : Composite // "Pimp my library" on Composite

Это работает:

new Composite(parent, SWT.NONE).contains(
  label() // should have type Composite => Label
)

Это не:

new Composite(parent, SWT.NONE).contains(
  radioGroup(Array(1,2), (_:Int).toString)() 
   // should have type Composite => RadioGroup[Int]
)

со следующей ошибкой:

polymorphic expression cannot be instantiated to expected type;
found   : => (org.eclipse.swt.widgets.Composite) => main.scala.RadioGroup[Int]
required: (org.eclipse.swt.widgets.Composite) => Unit

Я могу аннотировать тип возврата radioGroup как Unit, но я не понимаю 1) как могут различаться случаи radioGroup и label; 2) почему в сообщении об ошибке есть дополнительная стрелка в начале типа «найдено».

...