Is it sufficient to split the unapply into unapplySeq(CharSequence) and unapplySeq(Match)?
Is it desirable?
scala> val r = "(\\d+)".r; List(1) collect { case r(i) => i }
<console>:9: error: cannot resolve overloaded unapply
List(1) collect { case r(i) => i }
^
<console>:9: error: not found: value i
List(1) collect { case r(i) => i }
^
scala> val t = "Last modified 2011-07-15"
t: String = Last modified 2011-07-15
scala> val dateP1 = """(\d\d\d\d)-(\d\d)-(\d\d)""".r
dateP1: scala.util.matching.Regex = (\d\d\d\d)-(\d\d)-(\d\d)
scala> val copyright: Option[String] = for {
| dateP1(year, month, day) <- dateP1 findFirstIn t
| } yield year
copyright: Option[String] = Some(2011)
scala> val copyright: Option[String] = for {
| dateP1(year, month, day) <- dateP1 findFirstMatchIn t
| } yield year
copyright: Option[String] = Some(2011)
scala> val ns = List("1,2","x","3,4")
ns: List[String] = List(1,2, x, 3,4)
scala> val r = "(\\d+)".r
r: scala.util.matching.Regex = (\d+)
scala> (ns map (r findFirstMatchIn _)).flatten
res0: List[scala.util.matching.Regex.Match] = List(1, 3)
scala> res0 collect { case r(i) => i }
res1: List[String] = List(1, 3)
scala> ns map (s => (r findFirstIn s) getOrElse s)
res2: List[String] = List(1, x, 3)
scala> ns map (s => (r findFirstMatchIn s) getOrElse s)
res3: List[Object] = List(1, x, 3)
scala> res3 collect { case r(i) => i }
<console>:11: error: cannot resolve overloaded unapply
res3 collect { case r(i) => i }
^
<console>:11: error: not found: value i
res3 collect { case r(i) => i }
^