scala - 这种提升功能有名字吗?

标签 scala haskell functional-programming option lifting

我写了一个 Scala 函数:

  def liftOrIdentity[T](f: (T, T) => T) = (a: Option[T], b: Option[T]) =>
    (a, b) match {
      case (Some(a), None) => Some(a)
      case (None, Some(b)) => Some(b)
      case (Some(a), Some(b)) => Some(f(a, b))
      case (None, None) => None
    }

这个图案有名字吗?由于情况 1 和 2,它不是一个适用的仿函数。请随意用 Haskell 或 Scala 代码回答。

最佳答案

收藏时是flatten + reduce :

List(a, b).flatten.reduceOption(f)
a ++ b reduceOption f // same result

关于scala - 这种提升功能有名字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17188123/

相关文章:

database - 如何在 Play 2.0 (Scala) 中使用 DATABSE_URL 进行本地连接到 mysql

scala - 对Cats Effect IO进行认真评估并忘记行为

javascript - 如何使用递归转置 m*n 矩阵?

java - 示例 Java 程序中的 Spark UDF 反序列化错误

haskell - 欧拉计划 #2 大极限

haskell - 最少两个可能

haskell - `<$>`/`<*>`/`join` 的组合等于 `>>=` 吗?

java - 编写 Java-8-Functional-Interface

functional-programming - 什么时候可以修改函数式语言中的变量?

java - Scala 有什么好处?