代码之家  ›  专栏  ›  技术社区  ›  kag0

在函数式编程术语中,用orElse或其他回退方法调用什么?

  •  3
  • kag0  · 技术社区  · 7 年前

    参考scala,我们看到了回退行为( orElse PartialFunction , Option ,还有猫 EitherOps

    编辑: 到目前为止,我发现了一些很好的答案,在猫身上挖掘更多

    Semigroup[Option[String]].combine(None, Some("b"))
    res0: Option[String] = Some(b)
    
    Semigroup[Option[String]].combine(Some("a"), Some("b"))
    res1: Option[String] = Some(ab)
    
    SemigroupK[Option].combineK(None, Some("b"))
    res2: Option[String] = Some(b)
    
    SemigroupK[Option].combineK(Some("a"), Some("b"))
    res3: Option[String] = Some(a)
    
    SemigroupK[List].combineK(List("a"), List("b"))
    res4: List[String] = List(a, b)
    
    Alternative[List].unite(List(None, Some("a"), Some("b")))
    res4: List[String] = List(a, b)
    

    Alt Alternative 和猫不太一样 备选方案 . 更有趣的是 SemigroupK (被叫) Plus
    所以我们可以说这个行为是由一个类型表现出来的,对于这个类型,如果没有一个半群作为它的内部类型,就不能定义一个半群(因为这样我们就可以说scalaz 中高音 哈斯克尔呢 备选方案

    2 回复  |  直到 7 年前
        1
  •  2
  •   Silvio Mayolo    7 年前

    Scala的一个不错的部分是受到Haskell中类似概念的启发。在这种情况下, orElse 非常接近“替代”操作符 <|> Alternative 类型类。

    Applicative 是一个 Functor (阅读:它包含了事物,并且有一些与这些事物相互作用的方式)它有一些有意义的“组合”这些事物的方式: <*> <*&燃气轮机; 与Scala的有些相似(虽然不完全相同) andThen 备选方案 这提供了一种从失败中“恢复”的方法,所以 <|&燃气轮机; 奥莱尔斯 .

    既然你提到了单子, 是对 Monad 在这个意义上 单子 是一个 实用的 实用的 是必然的 easily 被制成 但不可能 单子

    总之,我相信你要找的术语是“具有替代能力的应用函子”,由 备选方案 类型类。如果你想听起来非常傲慢,我们可以用它严格的数学名称来称呼它:一个由一个额外的幺半结构支持的强松弛幺半函子。但那只是我们在炫耀而已。

        2
  •  1
  •   triggerNZ    7 年前

    Alt :

    https://github.com/scalaz/scalaz/blob/series/7.3.x/core/src/main/scala/scalaz/Alt.scala

    基本上, orElse 变成 alt

    def alt[A](a1: =>F[A], a2: =>F[A]): F[A] .