[英]Map for generic HList
說我們有以下方法
def func[T <: HList](hlist: T, poly: Poly)
(implicit mapper : Mapper[poly.type, T]): Unit = {
hlist map poly
}
和自定義聚
object f extends (Set ~>> String) {
def apply[T](s : Set[T]) = s.head.toString
}
所以我可以像這樣使用這個func
func(Set(1, 2) :: Set(3, 4) :: HNil, f)
在我的代碼中,我只有少量的Polies和大量的func
調用。 為此,我嘗試將poly: Poly
移至隱式參數並得到預期的消息
illegal dependent method type: parameter appears in the type of another parameter in the same section or an earlier one
如何更改或擴展poly: Poly
參數以避免此錯誤(我需要保持類型簽名func[T <: HList](...)
)?
也許您可以使用帶有apply
方法的類來使用“部分應用”的技巧:
import shapeless._
import ops.hlist.Mapper
final class PartFunc[P <: Poly](val poly: P) {
def apply[L <: HList](l: L)(implicit mapper: Mapper[poly.type, L]): mapper.Out =
l map poly
}
def func[P <: Poly](poly: P) = new PartFunc(poly)
與您的poly f
:
val ff = func(f)
ff(Set(1, 2) :: Set(3, 4) :: HNil) // 1 :: 3 :: HNil
ff(Set("a", "b") :: Set("c", "d") :: HNil) // a :: c :: HNil
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.