Ich leitete die Frage an Josh Suereth weiter. Dies ist seine Antwort:
ich nicht viel Zeit haben zu reagieren, aber ich werde auf Beispiele von bieten, was ich meine:
Beispiel # 1 - Formularüberprüfung
Ich möchte einige Validierung gegen Ein- und Aggregat alle die Fehler laufen, das heißt sie aufgespürt in parallel. Mit anwendungsspezifischen Funktionen kann ich dies tun .
So ein Satz von „Verarbeitung“ Funktionen gegeben, etwa so:
def processUser(data: Data): Validation[User] = {
if (data get "username" isEmpty) Failure("username must not be empty")
else {
val Some(user) = data get "username"
if (user contains badCharacterRegex) Failure(s"username must not contain one of ${badchars}")
else Success(user)
}
}
def processCreditCard(data: Data): Validation[CreditCard] = ...
def processAddress(data: Data): Validation[Address] = ...
def handleForm(data: Data): ??? = {
(processUser(data), processCreditCard(data), processAddress(data)) map { (user, card, address) =>
postPayment(user, address, card)
} recover { (errors) =>
errors foreach println
}
Jetzt Formular ausdrucken behandelt Fehler mit Creditcard/username + Adresse alle zur gleichen Zeit, da Sie kombiniert haben sie verwenden einen anwendungsspezifischen Funktor. Das ist paralleler Fehlerbericht (obwohl Tests nicht tatsächlich parallel durchgeführt werden).
(2) Futures
Ich möchte ein paar Dinge parallel zu tun, und die Ergebnisse zu kombinieren. Futures "Zip" -Methode ist eigentlich ein applicative Functor in Verkleidung. Ich kann dies tun:
Future(computation1) zip Future(computation2) map { case (one,two) => .... }
Ich habe gerade Applicative Funktoren verwendet, um parallele Berechnungen „Join“.
Es entspricht genau dem Formularüberprüfungsbeispiel.
Hoffe, dass hilft! - Josh
(beachten Sie diese Code-Schnipsel sind nicht übersetzbare Beispiele, ich war in Scalaz SBT applicative Syntax mit den Konzepten, so dass Sie eine Bibliothek wählen müssen applicatives verwenden und was sie auf sich bewerben)
Ich habe ein Beispiel in [meine Folien] (https://docs.google.com/presentation/d/1iiTmrGkc7lZHcrgQOQ1xfro82BvFOqoVSnhH-HdWPx4/present#slide=id.p) –