我无法将映射的元组映射到其组成类型。如何以类型安全的方式实现read
方法Impl[T]
?目前我只是用Tuple.toArray
/Tuple.fromArray
trait Reader[A]:
def read: A
object Reader:
def apply[T <: Tuple] (columns: Tuple.Map[T, Reader]): Reader[T] = Impl(columns)
private class Impl[T <: Tuple](columns: Tuple.Map[T, Reader]) extends Reader[T]:
def read: T = ???
编辑(1):添加非类型安全代码
private class Impl[T <: Tuple](columns: Tuple.Map[T, Reader]) extends Reader[T]:
def read: T =
val array =
columns
.toArray
.asInstanceOf[Array[Reader[_]]]
val read = array.map(_.read)
val tuple =
Tuple
.fromArray(read)
.asInstanceOf[T]
tuple
编辑 (2):当前不完整的尝试 - 包含 PolyFunction 错误
extension [F[_], T <: Tuple] (mapped: Tuple.Map[T, F]):
def unmap(f: [a] => F[a] => a): T = ???
object Reader:
private class Impl[T <: Tuple](columns: Tuple.Map[T, Reader]) extends Reader[T]:
def read: T =
val read_column: [a] => Reader[a] => a = [a] => (reader: Reader[a]) => reader.read
val tuple: T = columns.unmap(read_column)
tuple