Я написал функцию 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)
. - person senia   schedule 19.06.2013