Kotlin 在Arrow中,遍历使用序列而不是线程化计算

Kotlin 在Arrow中,遍历使用序列而不是线程化计算,kotlin,functional-programming,sequence,traversal,Kotlin,Functional Programming,Sequence,Traversal,我使用的是kotlin1.3.41和arrow0.10.0-SNAPSHOT。我想按顺序读取文件中的所有行: import arrow.core.extensions.sequence.traverse.traverse import arrow.fx.IO import arrow.fx.extensions.io.monad.monad import arrow.fx.extensions.io.monadDefer.monadDefer import arrow.fx.fix import

我使用的是kotlin
1.3.41
和arrow
0.10.0-SNAPSHOT
。我想按顺序读取文件中的所有行:

import arrow.core.extensions.sequence.traverse.traverse
import arrow.fx.IO
import arrow.fx.extensions.io.monad.monad
import arrow.fx.extensions.io.monadDefer.monadDefer
import arrow.fx.fix
import java.io.File

val path = "/path/to/file"

fun main() {    
    val b = File(path).inputStream()
        .bufferedReader()
        .lineSequence()
        .traverse(IO.monad()) {
            IO.monadDefer().later { it }
        }
        .fix()

    b.unsafeRunAsync {
        println(it)
    }
}
不幸的是,我遇到了以下异常:
java.lang.IllegalStateException:此序列只能使用一次。

如果我没有使用
遍历
,那么我不会得到异常。 文档中说:
序列可以多次迭代,但是一些序列实现可能会限制自己只迭代一次。
这对于缓冲读取器是有意义的。我猜这意味着序列被
遍历
至少迭代两次。我试图查看
遍历
源代码,但未能完全理解它

我不明白为什么遍历序列会消耗它。我不能直接执行计算吗? 是否有任何方法可以在不使用序列的情况下执行类似于
的遍历操作