zipWith が欲しい

zip と map で簡単に実装できればまあいいかなと思ったんだけど、

val xs = List(1, 2, 3)
val ys = List(4, 5, 6)
xs zip ys map { (x, y) => x + y }
  // error: wrong number of parameters; expected = 1

ぐああー。引数を n 個受け取る関数と n-tuple を 1 つ受け取る関数が区別されるからこんなことに。こう書くしかないのか。

xs zip ys map { case (x, y) => x + y }
xs zip ys map { p => p._1 + p._2 }
xs zip ys map { p => val (x, y) = p; x + y }

ださいなあ。
あと、scanl も欲しい。自分で実装すりゃいいんだけど。