Новое для бесформенного, и у меня есть вопрос о том, как использовать полиморфные функции, которые нуждаются в некоторых зависимостях. Я в принципе этого кода и хочу, чтобы вытащить somePoly объекта из метода выполнения:Вывод бесформенных полиморфных функций, которые имеют зависимости
import shapeless._
object SomeObject {
type SomeType = Int :+: String :+: (String, Int) :+: CNil
def run(someList: List[SomeType], someInt:Int, someWord:String) = {
object somePoly extends Poly1 {
implicit def doIt = at[Int](i => i + someInt + someWord.length)
implicit def doIt2 = at[String](i => i.length + someWord.length)
implicit def doIt3 = at[(String, Int)](i => i._1.length + someWord.length)
}
someList.map(_.map(somePoly))
}
}
Один, как я думал, делать это было так, но мне кажется грязным:
object TypeContainer {
type SomeType = Int :+: String :+: (String, Int) :+: CNil
}
case class SomePolyWrapper(someList: List[TypeContainer.SomeType], someInt:Int, someWord:String){
object somePoly extends Poly1 {
implicit def doIt = at[Int](i => i + someInt + someWord.length)
implicit def doIt2 = at[String](i => i.length + someWord.length)
implicit def doIt3 = at[(String, Int)](i => i._1.length + someWord.length)
}
}
object SomeObject {
def run(someList: List[TypeContainer.SomeType], someInt:Int, someWord:String) = {
val somePolyWrapper = SomePolyWrapper(someList, someInt, someWord)
someList.map(_.map(somePolyWrapper.somePoly))
}
}
Кто-нибудь есть совет?
Связанные обсуждения gitter https://gitter.im/milessabin/shapeless?at=56608190d2a5a7813cd41422 – cvogt