我有兩個程式的實作
def program_valid: IO[Unit] = for {
interpreter <- Interpreter[IO]
fib1 <- display(interpreter).start
fib2 <- read(interpreter).start
_ <- fib1.join
_ <- fib2.join
} yield ()
def program_invalid: IO[Unit] = for {
interpreter <- Interpreter[IO]
_ <- (read(interpreter), display(interpreter)).parSequence
} yield ()
第一個作業得很好,這意味著兩個光纖都在運行(顯示和讀取)。不幸的是,第二個實作方式不同。看起來只有顯示光纖可以運行。為什么會這樣?這里有什么區別?
uj5u.com熱心網友回復:
parSequence用于集合(實際上對于具有 實體的型別Traverse),不確定它是如何編譯的;好吧,我的意思是可能有一個Traverse實體,Tuple2但它絕對不會做你想要的。
您可以使用:
_ <- (read(interpreter), display(interpreter)).parTupled.void
// Or
_ <- IO.both(read(interpreter), display(interpreter)).void
// Or
_ <- read(interpreter).both(display(interpreter)).void
// Or
_ <- List(read(interpreter), display(interpreter)).parSequence_
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/393189.html
