私の理解では、flatMap
がMonad
はなく、Applicative
に利用可能であるということです。JsResult - MonadまたはApplicative? <code>Monad</code>と<code>Applicative</code>の区別のの
それが本当ならば、私はこれらのスカラ座で混乱しているがJSON docsを再生する:
をだから、面白いものをJsResult [A]がモナド構造 であり、そのような構造の古典的な機能を使用できることがあります:
flatMap [X](F:A => JsResult [X]):JsResult [X]
など
しかし、その後、ドキュメントが言うように行く:。
それがエラーを累積するためJsResult [A]は、単に単項しかしApplicativeの ではないことに注意してくださいは、この累積的な機能により、JsResult [T] は、 がすべてではなく最初のエラーだけを取得するため、理解のために使用するのはあまり良いことになりません。私が理解し、
for-comprehension
がflatMap
ためのシンタックスシュガーであり、以来
、どのようJsResult
両方Applicative
とMonad
ことができますか?
Scalaz 'Validation'を見てみましょうこれが何を意味するのかを正確に見てください。 – wheaties
@wheaties、ああ、それは私が取り組んできた本(Functional Programming in Scala)でカバーされています - https://github.com/kman007us/side-work/blob/master/MonadsSbt/src/main/scala/適用/ ValidationApplicative.scala。それは同じ、そうですか?だから、あなたは 'Monad'や' Applicative'を使ってバリデーションを行い、* all *エラーを読むことができますか? –
私は実際にこの質問に答えるつもりはないので、私はそれを台無しにするだろうと確信しています。あなたのタグに 'Monad'と' Applicative 'を追加し、もう少し多くの眼球が答えるでしょう。基本的に、全ての 'Applicative'の追加は' pure'と '<*>'という2つのメソッドよりも多くなっています。後者は、例外を連鎖させる問題を解決するものです(彼らが「Semigroup」で開催されている場合)。 – wheaties