OptionやEither型でエラーを表現する

OptionやEitherを使うと呼び出し元のコードに失敗した際の処理を強制させることができる

失敗時の処理はオールオアナッシングやベストエフォートといった戦略が取れる

Option.orElse()やEither.orElse()は成功(Some/Right)した場合はそのまま値を返し、失敗(None/Left)の場合は自分で失敗時の処理を記述できる

※ 戻り値はOption/Eitherになるので、ベストエフォートの場合はフォールバック値をSomeやRightでラップし、オールオアナッシングの場合はNoneやLeftを返すなど