shapeless を使用して、タイプセーフな方法でオブジェクトを簡単に蓄積しようとしています。
:::
問題は、concat( ) twoを実行したい場合ですHList
。私は初心者(少なくともそう思われる)の問題に遭遇しています。コンテキスト内のPrepend
暗黙的なインスタンスがありません。
しかし、 を調べるhlist.scala
と、ジェネリックがオブジェクトとimplicit def
で定義されていることがわかります。Prepend
PrependAux
手動で追加import Prepend
してimport PrependAux
も何も変わりませんでした(明らかに...)。
したがって、ここでコードを最小限に抑えます。
enter code here
import shapeless._
import HList._
import Prepend._
import PrependAux._
object test {
val a:HList = 1 :: 4 :: "A" :: HNil
val b:HList = "R" :: false :: HNil
val c:HList = a ::: b // <<<<<<<<<<< NEEDS A Prepend in the context
}
コンソールで次のようにします。
[error] test.scala:10: could not find implicit value for parameter prepend: shapeless.Prepend[shapeless.HList,shapeless.HList]
[error] val c:HList = a ::: b // this needs an implicit Prepend in the current context
何が私の目を燃やすべきですか?
ありがとう
編集
下品化が以前は強すぎたため、実際の問題を少し再複雑化するための小さな更新。
これが私ができることのようなものです:
case class A[L<:HList](a:L) {
def doSmth[C <:HList](c:C) = a ::: c
}
したがって、実際の型にアクセスすることはできません。それらがHListであることを知っているだけです。