4

Cats 或 Scalaz 中是否有在不同容器类型之间转换的类型类?例如

  • 选项 ~> 试试
  • 尝试~>未来
  • 试试~>要么
  • 选项 ~> 列表

似乎FunctionK/ ~>/NaturalTransformation可能是我正在寻找的东西,但是没有为它们定义任何实例,我不知道为什么。

4

1 回答 1

5

自然转换是您正在寻找的。它们定义函子之间的态射(在这种情况下,是List[A]Option[A]类型构造函数)。您可以使用~>Scalaz 中的“运算符”定义一个:

def main(args: Array[String]): Unit = {
  val optionToList = new (Option ~> List) {
    override def apply[A](fa: Option[A]): List[A] = fa.toList
  }

  println(optionToList(Some(3)))
  println(optionToList(None))
}

产量:

List(3)
Nil

~>是性状的合成糖NaturalTransformation[-F[_], +G[_]]

/** A universally quantified function, usually written as `F ~> G`,
  * for symmetry with `A => B`.
  */
trait NaturalTransformation[-F[_], +G[_]] {
  self =>
  def apply[A](fa: F[A]): G[A]

  // Abbreviated for the answer
}
于 2016-12-23T09:36:40.677 回答