IO 모나드를 사용하고 싶습니다.스칼라즈의 입체 모나드 트래버스 _
그러나이 코드는 큰 파일과 함께 실행되지 않습니다. 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 모나드가 약간의 도전을 추가한다고 생각한다. – huynhjl