5

私は以下を構築しました:

import shapeless._
import poly._

object Main {
    def main(args: Array[String]) = {

        object iterateOverHList extends (List ~> Iterator) {
            def apply[T](it: List[T]) = it.iterator
        }

        val x = List(1,2,3) :: List("cat","dog") :: HNil

        val xIt = x map iterateOverHList

    }
}

上記のコードはうまく機能し、素晴らしいです。しかし、私はまだもっと欲しいです。HList にリストが含まれるように指定するのではなく、任意の Iterable を許可したいと考えています。このような:

import shapeless._
import poly._

object Main {
    def main(args: Array[String]) = {

        object iterateOverHList extends (Iterable ~> Iterator) {
            def apply[T](it: Iterable[T]) = it.iterator
        }

        val x = List(1,2,3) :: List("cat","dog") :: HNil

        val xIt = x map iterateOverHList

    }
}

この 2 番目のバージョンはコンパイルに失敗し、「パラメーター マッパーの暗黙的な値が見つかりませんでした: shapeless.ops.hlist.Mapper[iterateOverHList.type,shapeless.::[List[Int],shapeless.::[List[String]」というメッセージが表示されます。 ],shapeless.HNil]]]". Iterable で機能する関数が List で機能するはずであるという、私がここで期待しているサブタイプのポリモーフィズムは、何らかの理由で失敗しています。何故ですか?この問題を回避する方法はありますか?

4

1 に答える 1