Your object is runtime.Tuple2Zipped if you look at the signature
def foreach[U](f: (El1, El2) => U): Unit
Function f: (El1, E1l2) => U required, but your function f: ((El1, El2)) => U , therefore, an error.
I was also baffled, since Tuple2Zipped almost like List[(A,B)] , in fact, the toList method could do just that:
val zip = (List(1, 3, 5), List(2, 4, 6)).zipped.toList val f: Tuple2[Int, Int] => Unit = x => println(x._1 + x._2) zip.foreach(f)
Edit
I think you're looking for an implicit conversion from ((A, B)) => U to (A, B) => U , which is not what zippedTraversable2ToTraversable does. You can define something like this:
implicit def tupconv[A,B] (f: (((A,B)) => Unit)): (A, B) => Unit = Function.untupled(f)
Change V2
For the above code, you will need an implicit scope variable that will display from ((A,B)) => Unit to (A, B) => Unit as such where a mismatch exists. While the one you specified executes ZippedTraversable2[El1, El2] to Traversable[(El1, El2)] . If you want to use this implicit conversion, you can do this:
val zip = (List(1, 3, 5), List(2, 4, 6)).zipped val f: Tuple2[Int, Int] => Unit = x => println(x._1 + x._2) def thisUsesTheImplicitYouWant(t: Traversable[(Int,Int)]) = t.foreach(f) thisUsesTheImplicitYouWant(zip)