モナド操作に慣れ始めたばかりです。Option タイプについては、Tony Morris のチート シートが役立ちました: http://blog.tmorris.net/posts/scalaoption-cheat-sheet/
したがって、最終的には次のことを理解するのは簡単に思えます。
- map はオプション内の値を変換します
- 変身する許可を平らに
Option[Option[X]]
するOption[X]
Option[Option[X]]
flatMap はどういうわけか、 を生成してからフラット化するマップ操作ですOption[X]
少なくともそれは今まで私が理解していることです。
Each の場合、Either 自体は正しくバイアスされておらず、map / flatMap 操作がなく、射影を使用しているため、理解するのが少し難しいようです。
Scaladoc は読めますが、オプションのチート シートほど明確ではありません。誰かが基本的なモナド操作を説明するために、どちらかのシートチートを提供できますか?
それは私にEither.joinRight
は少し似RightProjection.flatMap
ているようで、どちらかの場合と同等のようOption.flatten
です。
Right がバイアスされている場合Either
、Either.flatten は、Either.joinRight ではないでしょうか?
この質問では、オプションと理解のためにEiherとの理解を求めていますが、答えの1つは、マップ/フラットマップ/フィルターに脱糖する方法のためにモナドを混在させることはできないと言っています。
この種のコードを使用する場合:
def updateUserStats(user: User): Either[Error,User] = for {
stampleCount <- stampleRepository.getStampleCount(user).right
userUpdated <- Right(copyUserWithStats(user,stampleCount)).right
userSaved <- userService.update(userUpdated).right
} yield userSaved
これは、3 つのメソッド呼び出しすべてが常に返さなければならないということEither[Error,Something]
ですか? メソッド呼び出しEither[Throwable,Something]
があるとうまくいかないということですか?
編集: Try[Something] は、右バイアスの [Throwable,Something] とまったく同じですか?