小编Red*_*k34的帖子

如何在没有溢出堆栈的情况下使用带有Scalaz7 Iterate的IO?

考虑这段代码(从这里获取并修改为使用字节而不是字符行).

import java.io.{ File, InputStream, BufferedInputStream, FileInputStream }
import scalaz._, Scalaz._, effect._, iteratee.{ Iteratee => I, _ }
import std.list._

object IterateeIOExample {
  type ErrorOr[+A] = EitherT[IO, Throwable, A]

  def openStream(f: File) = IO(new BufferedInputStream(new FileInputStream(f)))
  def readByte(s: InputStream) = IO(Some(s.read()).filter(_ != -1))
  def closeStream(s: InputStream) = IO(s.close())

  def tryIO[A, B](action: IO[B]) = I.iterateeT[A, ErrorOr, B] {
    EitherT(action.catchLeft).map(r => I.sdone(r, I.emptyInput))
  }

  def enumBuffered(r: => BufferedInputStream) = new EnumeratorT[Int, ErrorOr] {
    lazy val reader = r
    def apply[A] …
Run Code Online (Sandbox Code Playgroud)

scala scalaz iterate scalaz7

11
推荐指数
1
解决办法
582
查看次数

标签 统计

iterate ×1

scala ×1

scalaz ×1

scalaz7 ×1