首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通用HList地图

通用HList地图
EN

Stack Overflow用户
提问于 2016-06-27 10:52:33
回答 1查看 365关注 0票数 0

假设我们有如下方法

代码语言:javascript
复制
def func[T <: HList](hlist: T, poly: Poly)
    (implicit mapper : Mapper[poly.type, T]): Unit = {
    hlist map poly 
}

和定制的保利

代码语言:javascript
复制
object f extends (Set ~>> String) {
    def apply[T](s : Set[T]) = s.head.toString
}

所以我可以像这样使用这个func

代码语言:javascript
复制
func(Set(1, 2) :: Set(3, 4) :: HNil, f)

在我的代码中,我有少量的Polies和大量的func调用。为此,我尝试将poly: Poly移动到隐式参数,并获得预期的消息。

代码语言:javascript
复制
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](...))?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-27 12:15:52

也许您可以使用带有apply方法的类来使用“部分应用”技巧:

代码语言:javascript
复制
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)

用您的Polyf

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38052087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档