gpt4 book ai didi

scala - 在 Scala 中转换仿函数 (F[A] => G[A])(cats 或 scalaz)

转载 作者:行者123 更新时间:2023-12-05 00:53:26 25 4
gpt4 key购买 nike

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

  • 选项 ~> 尝试
  • 试试~> future
  • 试试~>要么
  • 选项 ~> 列表

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

    最佳答案

    自然变换正是您要寻找的。它们定义了仿函数之间的态射(在本例中,是 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
    }

    关于scala - 在 Scala 中转换仿函数 (F[A] => G[A])(cats 或 scalaz),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41297132/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com