如何映射到内部函子 (ValidationNel[A, Option[B]])

How to map on a inner Functor (ValidationNel[A, Option[B]])

我需要一个组合器将 ValidationNel[A, Option[B]] 转换为 ValidationNel[A, Option[C]] 以映射(通过映射选项)验证成功。

这是代码:

  def mapmap[A, B, C](valid: ValidationNel[A, Option[B]], f: B => C) : ValidationNel[A, Option[C]] =
    valid.map(_.map(f))

我也尝试过编写仿函数(但不幸的是,它无法编译):

def nestedMap[A, B, C](valid: ValidationNel[A, Option[B]])(f: B => C) : ValidationNel[A, Option[C]] = {
  val composed = Functor[Validation].compose[Option]
  composed.map(valid, f)
}

有没有更好的方法?

我们需要一个 类型的 lambda 来检索 ValidationFunctor 实例。

这是代码:

def nestedMap[A, B, C](valid: ValidationNel[A, Option[B]])(f: B => C) : ValidationNel[A, Option[C]] = {
  val composed = Functor[({type l[a] = ValidationNel[A, a]})#l].compose[Option]
  composed.map(valid)(f)
}