Chúng tôi đã sử dụng bộ biến đổi đơn vị WriterT trên Futures với hy vọng sẽ nhận được nhiều nhật ký được sắp xếp hơn từ một ứng dụng không đồng bộ, nhưng chúng tôi gặp phải một số rắc rối.Scalaz: bộ lọc nào đóng vai trò trong | @ |?
Nếu tôi biên dịch ứng dụng bên dưới, tôi nhận được lỗi sau. Xin lưu ý rằng đây không phải là cảnh báo về withFilter.
[lỗi] Giá trị bộ lọc không phải là thành viên của scalaz.WriterT [scala.concurrent.Future, Danh sách [Chuỗi], String]
Tại sao | @ | cần bộ lọc ở đây? Scalaz có cung cấp một chuyển đổi tiềm ẩn cho trường hợp này không?
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
import scalaz._
import Scalaz._
object Failure extends App {
type LoggedT[F[_], A] = WriterT[F, List[String], A]
type LoggedFuture[A] = LoggedT[Future, A]
//this is the applicative behavior that we want WriterT to preserve
val example = for {
z <- (Future("left") |@| Future("right")) { (x: String, y: String) => x + " " + y }
} yield z
example.onSuccess { case x => println(x) }
val test = for {
z: String <- (Future("left").liftM[LoggedT] |@| Future("right").liftM[LoggedT]) { (x: String, y: String) => x + " " + y }
} yield z
test.value.onSuccess { case x => println(x) }
}
Lỗi này xảy ra với phiên bản Scala: 2.11.7 và Scalaz phiên bản: 7.2.0
Tôi đã thêm chú thích loại chỉ để giúp loại IntelliJ kiểm tra mã. Tôi sẽ không bao giờ đoán nó có thể là điều này có hại. –