Soruyu Josh Suereth'e ilettim. -
ben cevap çok zaman yok, ama ne demek istediğimi dair örneklerin sunarız
Mike: Bu onun Cevap
Örnek # 1 - Form Doğrulama.
ben yani bazı girdisine karşı doğrulamayı ve agrega tüm hataları çalıştırmak paralel bunları algılamak istiyorum. Uygulama fonksiyonları ile I bunu yapabilir.
Yani, "işleme" işlevleri, bir dizi şöyle verilen:
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
}
Şimdi kombine beri formu aynı anda CreditCard/kullanıcı adı + adresi ile tüm hataları yazdırır işlemek Bir uygulama functor kullanarak. Bu paralel hata raporlaması ( testi aslında paralel olarak yapılmamaktadır).
(2) Vadeli
ben paralel olarak bir şeyler yapmak ve sonuçlarını birleştirmek istiyorum. Geleceğin "zip" yöntemi, aslında gizlemede uygulamalı bir functor. Ben bunu yapabilirsiniz:
Future(computation1) zip Future(computation2) map { case (one,two) => .... }
Sadece paralel hesaplamalar "katılmak" için Uygulanabilir functors kullandım.
Tam olarak Form doğrulama örneği ile aynıdır.
Bu yardımcı olur umarım! - Josh
(bu kod parçacıkları olmayan derlenebilir örneklerdir not; ben Scalaz içinde kavramlarla SBT en uygulamalı sözdizimi kullanıyordu, onların üzerine başvuran hangi applicatives kullanması ve bir kütüphane seçmeniz gerekir böylece)
[Slaytlarım] içinde bir örneğim var (https://docs.google.com/presentation/d/1iiTmrGkc7lZHcrgQOQ1xfro82BvFOqoVSnhH-HdWPx4/present#slide=id.p) –