scala - 类型依赖隐式

标签 scala shapeless

函数中需要两个隐式,但我不能在 相同的参数列表,因为我得到了 dependent method type。所以我 考虑再次柯里化(Currying),但这给了我一个语法错误。 执行此操作的正确方法是什么?

def add[A](newAnnotations: Seq[A])
    (implicit maybeAdd: MaybeAdd[L, Seq[A]])
    (implicit mod: Modifier[maybeAdd.Out, Seq[A], Seq[A]]):
    Slab[Content, maybeAdd.Out] = {
  val l = maybeAdd(annotations, Seq[A]())
  l.updateWith(_ ++ newAnnotations)
}

最佳答案

我编辑了 MaybeAdd 以具有 Aux 类型,正如@milessabin 所建议的那样。

def add[A, Out0](newAnnotations: Seq[A])(implicit maybeAdd: MaybeAdd.Aux[L, Seq[A], Out0], mod: Modifier[Out0, Seq[A], Seq[A]]): Slab[Content, mod.Out] = {
  val l = maybeAdd(annotations, Seq[A]())
  new Slab(content, mod(l, _ ++ newAnnotations))
}

关于scala - 类型依赖隐式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25988174/

相关文章:

java - 如何在 Play Framework 中预先选择单选按钮/复选框组?

scala - 如何从 Map[String, String] 实例化案例类

scala - 用于减去 HList 类型的类型构造函数?

json - 使用 Action(parse.json) 时如何禁用 HTML 错误响应?

scala - 了解为什么 Zipper 是 Comonad

scala - 从 Play WS 获取 ahcResponse

scala - 用函数替换异步匿名类

class - 将枚举参数传递给案例类不起作用

scala - 减少使用 shapeless HList 时的编译时间

scala - 编解码器解码/编码分割长度字段