Given that we have two functions in scope with the same name but a different parameter list. How can I distinguish one from the other, such as in the case of trying to access the tupled function
Example:
scala> :paste
// Entering paste mode (ctrl-D to finish)
def f(s: String, l: Long): String = ???
def f(i: Int, l: Long): String = ???
val t:((String, Long)) => String = f.tupled
// Exiting paste mode, now interpreting.
<pastie>:15: error: ambiguous reference to overloaded definition,
both method f of type (i: Int, l: Long)String
and method f of type (s: String, l: Long)String
match expected type ?
val t:((String, Long)) => String = f.tupled
Simplifying the problem to function literals yields:
scala> :paste
// Entering paste mode (ctrl-D to finish)
def f(i: Int, l: Long): String = ???
def f(s: String, l: Long): String = ???
val g = f _
// Exiting paste mode, now interpreting.
<pastie>:15: error: ambiguous reference to overloaded definition,
both method f of type (s: String, l: Long)String
and method f of type (i: Int, l: Long)String
match expected type ?
val g = f _
^
But the explicit type annotation in the function literal example manages to solve the problem, where as for the apply method above in the context of tupled did not work
scala>
scala> :paste
// Entering paste mode (ctrl-D to finish)
def f(s: String, l: Long): String = ???
def f(i: Int, l: Long): String = ???
val g: (String, Long) => String = f _
// Exiting paste mode, now interpreting.
f: (s: String, l: Long)String <and> (i: Int, l: Long)String
f: (s: String, l: Long)String <and> (i: Int, l: Long)String
g: (String, Long) => String = $$Lambda$1458/794413935@60cbba57