I'm writing extractor object for functions expressions. Here is how it looks like:
object FunctionTemplate2 {
  private final val pattern = Pattern.compile("^(.+?)\\((.+?)\\,(.+?)\\)")
  //e.g. foo(1, "str_arg")
  def unapply(functionCallExpression: String): Option[(String, String, String)] = {
      //parse expression and extract
  }
}
And I can extract as follows:
"foo(1, \"str_arg\")" match {
  case FunctionTemplate2("foo", first, second) =>
    println(s"$first,$second")
}
But this is not as cute as it could be. I would like to have something like that:
case FunctionTemplate2("foo")(first, second) =>
  println(s"$first,$second")
Like curried extractor. So I tried this:
case class Function2Extractor(fooName: String){
  private final val pattern = Pattern.compile("^(.+?)\\((.+?)\\,(.+?)\\)")
  println("creating")
  def unapply(functionCallExpression: String): Option[(String, String, String)] = 
    //parse and extract as before
}
But it did not work:
"foo(1, \"str_arg\")" match {
  case Function2Extractor("foo")(first, second) =>
    println(s"$first,$second")
}
Is there a way to do this in Scala?
 
    