EitherとOptionの相互変換のイディオムです。 EitherのRightを成功、Leftを失敗として扱うことを想定しています。逆の場合は、成否の判定を反転させてください。 (分類の基準) Option→EitherOptionをEitherに変換する場合は、OptionのifDefinedメソッドでSome(成功の文脈)の判定を行い、Someの場合はその値をRightに、そうでない場合は失敗の内容を示す値(この場合はThrowable)をLeftに詰めます。 def f[T](o: Option[T], e: Throwable): Either[Throwable, T] = { if (o.isDefined) Right(o.get) else Left(e) } Optionでは、成功と失敗の切り分けはできますが、失敗の内容を示す値は保持していないので、外側から指定する必要