Scalaz 7 Validation や disjunction を使用して、失敗する可能性のある操作のリストを処理し、その結果を管理し始めました。
この種のユースケースには、十分に文書化された 2 つのケースがあります。
1/ 何かの条件のリストをチェックし、エラーがあればそれを蓄積したい。ここでは、常にリストの最後に移動し、エラーが発生した場合、グローバルな結果として失敗します。そして、それは機能するアプリカティブ ファンクターです。
2/ 失敗する可能性のあるいくつかのステップを実行し、最初に失敗したステップで停止したい。ここに、理解のために Scala でうまくいくモナドがあります。
したがって、同じ行にある他の 2 つの使用例がありますが、前例のいずれにもうまく対応していないようです: ステップのリストを処理し、失敗する可能性があり、エラーと成功の両方の結果を蓄積したい (例:これはファイルの変更のリストであり、エラーが発生する可能性があるのは、それが外界であるためです。成功した場合は、後で保持したいパッチです)。
2 つのユース ケースの違いは、(最初のエラーで) 早期に停止するか、リストの最後に移動する場合のみです。
OK、それで正しいことは何ですか?
(質問を書くと、それは単純なfoldLeftだと思いますよね?ここで質問を検証させます。他の誰かが不思議に思うなら)