I have the following problem. I was trying to make a high-order function that accepts two parameters: the String and the function type. Function type is defined this way:
(String, List[String]) => List[(String, List[String])]
I have also defined two functions f1 and f2 that has the same type. Afterwards I am trying to call myfun with f1 or f2. Here is the code:
object Main extends App {
def f1(t: (String,List[String])): List[(String,List[String])] = ...
def f2(t: (String,List[String])): List[(String,List[String])] = ...
def myfun(tableName: String)(fn: (String,List[String]) => List[(String,List[String])]): List[(String,List[String])] =
...
val res: List[(String,List[String])] = myfun("...")(f1)
res foreach println
val res2: List[(String,List[String])] = myfun("...")(f2)
res2 foreach println
}
and here is the error:
[error] found : (String, List[String]) => List[(String, List[String])]
[error] required: (String, List[String]) => List[(String, List[String])]
[error] val res: List[(String,List[String])] = myfun("...")(f1)
I cannot understand why the compiler is complaining. Can someone explain it?
Try this. Note the extra set of parenthesis surrounding the argument list to
fn.Unfortunately this extra set of parenthesis is needed to distinguish
from