Можно ли использовать сопоставление образцов с бесформенными копродуктами?
import shapeless.{CNil, :+:}
type ListOrString = List[Int] :+: String :+: CNil
def f(a: ListOrString): Int = a match {
case 0 :: second :: Nil => second
case first :: Nil => first
case Nil => -1
case string: String => string.toInt
}
Это, конечно, не работает, поскольку a
помещается как Coproduct
.
Есть ли альтернативный способ использования копроизведений и поддерживать возможность сопоставления шаблонов?