Mein Verständnis von ein der Unterschiede zwischen Monad
und Applicative
ist, dass flatMap
auf Monad
vorhanden ist, aber nicht Applicative
.JsResult - Monad oder Applicative?
Wenn das stimmt, ich bin verwirrt durch diese Scala JSON Spielen docs:
Also, was ist interessant, es ist, dass JsResult [A] ist eine monadischen Struktur und kann mit klassischen Funktionen solcher Strukturen verwendet werden, :
flatMap [X] (f: A => JsResult [X]): JsResult [X]
etc
Aber dann gehen die Dokumentation weiter:
Bitte beachten Sie, dass JsResult [A] nicht nur Monadic aber Applicative weil sie Fehler kumulieren. Dieses kumulative Feature macht JsResult [T] macht es nicht sehr gut mit zum Verständnis verwendet werden, weil Sie nur den ersten Fehler und nicht alle erhalten.
Da, wie ich es verstehe, ein for-comprehension
syntaktischer Zucker für flatMap
ist, wie kann JsResult
sowohl ein Applicative
und Monad
?
Werfen Sie einen Blick auf Scalaz 'Validation' um genau zu sehen, was das bedeutet. – wheaties
@wheaties, ah es ist in dem Buch (Funktionale Programmierung in Scala) Übung, an der ich gearbeitet habe - https://github.com/kman007us/side-work/blob/master/MonadsSbt/src/main/scala/ Applikativ/ValidierungApplicative.scala. Es ist das gleiche, ja? So können Sie Validierung durchführen und * alle * Fehler über 'Monad' oder' Applicative' lesen? –
Ich werde diese Frage eigentlich nicht beantworten, denn ich bin mir sicher, dass ich es vermasseln würde. Fügen Sie 'Monad' und' Applicative' zu Ihren Tags hinzu und ich wette, dass noch ein paar Augäpfel antworten werden. Grundsätzlich fügt ein 'Applicative' zwei weitere Methoden' pure' und '<*>' hinzu. Letzteres ist, was "löst" das Problem der Verkettung der Ausnahmen (vorausgesetzt, sie sind in einer "Semigroup" gehalten.) – wheaties