Qual é o raciocínio por trás da adição da palavra-chave "case" ao Scala?

Além de:

case class A

...caso o que é bastante útil?

Por que precisamos usarcase emmatch? Não faria:

x match {
  y if y > 0 => y * 2
  _ => -1
}

... estarMuito de mais bonita e concisa?

Ou por que precisamos usarcase quando uma função leva uma tupla? Diga, nós temos:

val z = List((1, -1), (2, -2), (3, -3)).zipWithIndex

Agora não é:

z map { case ((a, b), i) => a + b + i }

...caminho mais feia do que apenas:

z map (((a, b), i) => a + b + i)

...?