Одним из решений является написать функцию отображения:
def parse(s: String) = s.split(",") match {
case Array(a,b,c) => (a,b,c)
}
parse("x,x,x") // (x,x,x)
Вы можете написать более общее решение, используя бесформенное:
def toTuple[H <: HList](s: String)(implicit ft: FromTraversable[H], t: Tupler[H]) = s.split(",").toHList[H].get.tupled
тогда вы можете использовать его напрямую:
toTuple[String :: String :: String :: HNil]("x,x,x") // (x,x,x)
toTuple[String :: String :: HNil]("x,x") // (x,x)
или исправьте, затем введите и используйте его:
def parse3(s: String) = toTuple[String :: String :: String :: HNil](s)
parse3("x,x,x") // (x,x,x)