Два набора параметров конструктора в классе scala

Что делает этот код? Почему существуют два набора параметров конструктора?

class A(val x: Int)(val y: Int)

Я могу инициализировать объект и использовать оба поля:

val a = new A(5)(7)
println(a.x + ", " + a.y)

Если я создаю класс case, я могу сопоставить только первый набор параметров.

case class A(x: Int)(y: Int)
val a = A(5)(7)
a match {
  A(x) => println(x)
}

Невозможно создать 3 набора параметров. Он не компилируется. Итак, каков смысл двух наборов параметров конструктора?

Ответ 1

В соответствии с scala спецификацией (см. раздел 5.3) второй набор параметров посвящен неявным параметрам. Разделение параметров в двух наборах позволяет вам определить только неявный паметатор, а другой - контекстно определенный.

На самом деле довольно странно, что компилятор использует неявные параметры во втором наборе.