我想使用IO monad。Scalaz的遍歷_IO monad
但是這段代碼不能用大文件運行。 我得到一個StackOverflowError。 我試過-DXss
選項,但它會拋出相同的錯誤。
val main = for {
l <- getFileLines(file)(collect[String, List]).map(_.run)
_ <- l.traverse_(putStrLn)
} yield()
我該怎麼辦?
我寫了輸出所有元素的Iteratee。
def putStrLn[E: Show]: IterV[E, IO[Unit]] = {
import IterV._
def step(i: IO[Unit])(input: Input[E]): IterV[E, IO[Unit]] =
input(el = e => Cont(step(i >|> effects.putStrLn(e.shows))),
empty = Cont(step(i)),
eof = Done(i, EOF[E]))
Cont(step(mzero[IO[Unit]]))
}
val main = for {
i <- getFileLines(file)(putStrLn).map(_.run)
} yield i.unsafePerformIO
這也是相同的結果。
我認爲是由IO實現引起的。
的第一個問題是,爲什麼*/*如何豈不是有一個大的文件運行你得到一個堆棧溢出錯誤,內存不足錯誤或其他內容? –
我得到一個StackOverflowError。我嘗試了-DXss選項,但是拋出了相同的錯誤。 –
同意,我認爲IO monad增加了一些挑戰。 – huynhjl