Я использую shapeless 2.1.0 -scala 2.11, jdk 1.7: у меня есть черта
trait Input[T]{
def location:String
}
object location extends Poly1 {
implicit def caseInput[T] = at[Input[T]](l => l.location)
}
val list = new Input[String] {def location:String="/tmp"} :: HNil
list.map(location)
Это правильно возвращается в моей консоли
shapeless2.::[String,shapeless2.HNil] = /tmp :: HNil
Однако, когда у меня точно такая же логика в функции - где HList возвращается мне из другого вызова функции, и я отображаю на нем функцию, я получаю ошибку времени компиляции
:could not find implicit value for parameter mapper: shapeless.ops.hlist.Mapper[location.type,shapeless.::[Input[String]{...},shapeless.HNil]]
Я подозреваю, что, вероятно, упускаю некоторые скрытые факты. Я проверил бесформенные тесты и документацию - надеюсь, я не пропустил ничего слишком очевидного.
Я могу создать полный пример, чтобы воссоздать проблему, если это не что-то очевидное - спасибо за прочтение.
Бест, Амит
Обновлено: с примером
trait Input [T] {def location: String значение def: T}
trait location extends Poly1 {
implicit def caseList[T] = at[Input[T]](l => l.location)
}
object testfun extends location {
implicit val atString = at[Input[String]](_.location)
implicit val atInt = at[Input[Int]](_.location)
implicit val atLong = at[Input[Long]](_.location)
}
def inputs:HList={
val str = new Input[String]{
override def location: String = "/tmp/string"
override def value: String = "here it is"
}
val ints = new Input[Int]{
override def location: String = "/tmp/1"
override def value: Int = 1
}
val longs = new Input[Long]{
override def location: String = "/tmp/1l"
override def value: Long = 1l
}
str::ints::longs::HNil
}
>>>println(inputs.map(testfun))
could not find implicit value for parameter mapper: shapeless.ops.hlist.Mapper[HListTest.testfun.type,shapeless.HList]
Если бы я удалил возвращаемый тип входов def, я не получил бы никаких ошибок.
inputs
какHList
, который отбрасывает информацию о типе, необходимую дляMapper
. Попробуйте определить его какInput[String] :: Input[Int] :: Input[Long] :: HNil
или позвольте сделать вывод. - person Miles Sabin   schedule 14.03.2015