2

我无法将映射的元组映射到其组成类型。如何以类型安全的方式实现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

4

0 回答 0