使用 scala 作为参考,我们orElse
在几个地方看到了一个后备行为 ( ),例如PartialFunction
、Option
和 cat EitherOps
。
这感觉与 monad 的扁平化行为相似但不一样。对于表现出这种行为的事物,是否有一个函数式编程术语?
编辑:到目前为止,一些很好的答案,在猫身上挖掘更多,我发现
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)
所以我现在看到 scalazAlt
和 haskell与 catAlternative
不太一样Alternative
。更有趣的是SemigroupK
(Plus
根据猫文档在 scalaz 中调用)。
所以我们可以说这种行为是由一个类型表现出来的,如果没有一个半群作为它的内部类型,你就不能定义一个半群(因为我们可能会说 scalazAlt
和 haskellAlternative
是这种类型的半群)?