Tôi muốn sử dụng IO monad.Traverse_ của Scalaz với IO monad
Nhưng mã này không chạy với tệp lớn. Tôi nhận được một StackOverflowError. Tôi đã thử tùy chọn -DXss
, nhưng nó ném cùng một lỗi.
val main = for {
l <- getFileLines(file)(collect[String, List]).map(_.run)
_ <- l.traverse_(putStrLn)
} yield()
Tôi làm cách nào?
Tôi đã viết Iteratee được xuất tất cả phần tử.
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
Đây cũng là kết quả tương tự.
Tôi cho là do việc triển khai IO.
câu hỏi thứ nhất là lý do tại sao */bao * là nó không chạy với một tập tin lớn bạn có nhận được một lỗi tràn ngăn xếp, lỗi hết bộ nhớ, hoặc cái gì khác? –
Tôi đang nhận được một StackOverflowError. Tôi đã thử tùy chọn -DXss, nhưng ném cùng một lỗi. –
Đồng ý, tôi nghĩ rằng đơn nguyên IO thêm một chút thách thức. – huynhjl