Option Монада - отличный выразительный способ справиться с чем-то или чем-либо в Scala. Но что, если нужно регистрировать сообщение, когда "ничего" не происходит? Согласно документации Scala API,
Любой тип часто используется как альтернатива Scala.Option, где Left представляет собой отказ (по соглашению) и Правильно сродни Некоторым.
Однако мне не повезло найти лучшие практики с использованием Либо или хороших примеров реального мира, связанных с Либо для обработки сбоев. Наконец, я придумал следующий код для своего собственного проекта:
    def logs: Array[String] = {
        def props: Option[Map[String, Any]] = configAdmin.map{ ca =>
            val config = ca.getConfiguration(PID, null)
            config.properties getOrElse immutable.Map.empty
        }
        def checkType(any: Any): Option[Array[String]] = any match {
            case a: Array[String] => Some(a)
            case _ => None
        }
        def lookup: Either[(Symbol, String), Array[String]] =
            for {val properties <- props.toRight('warning -> "ConfigurationAdmin service not bound").right
                 val logsParam <- properties.get("logs").toRight('debug -> "'logs' not defined in the configuration").right
                 val array <- checkType(logsParam).toRight('warning -> "unknown type of 'logs' confguration parameter").right}
            yield array
        lookup.fold(failure => { failure match {
            case ('warning, msg) => log(LogService.WARNING, msg)
            case ('debug, msg) =>   log(LogService.DEBUG, msg)
            case _ =>
        }; new Array[String](0) }, success => success)
    }
(Обратите внимание, что это фрагмент из реального проекта, поэтому он не будет компилироваться сам по себе)
Буду признателен за то, что вы используете Either в своем коде и/или более совершенные идеи по рефакторингу вышеуказанного кода.