คำถามติดแท็ก iterate

1
Scalaz iteratees: "Lifting" `EnumeratorT` เพื่อให้ตรงกับ IterateeT สำหรับ monad ที่ใหญ่กว่า
หากฉันมีEnumeratorTและที่เกี่ยวข้องIterateeTฉันสามารถเรียกใช้พวกเขาด้วยกัน: val en: EnumeratorT[String, Task] = EnumeratorT.enumList(List("a", "b", "c")) val it: IterateeT[String, Task, Int] = IterateeT.length (it &= en).run : Task[Int] หากตัวแจงนับเป็น "ใหญ่กว่า" iteratee monad ฉันสามารถใช้upหรือโดยทั่วไปHoistเพื่อ "ยก" iteratee เพื่อให้ตรงกับ: val en: EnumeratorT[String, Task] = ... val it: IterateeT[String, Id, Int] = ... val liftedIt = IterateeT.IterateeTMonadTrans[String].hoist( implicitly[Task |>=| Id]).apply(it) (liftedIt …

1
หลีกเลี่ยงการรั่วไหลของหน่วยความจำด้วย Scalaz 7 zipWithIndex / group enumeratees
พื้นหลัง ตามที่ระบุไว้ในคำถามนี้ฉันใช้ Scalaz 7 วนซ้ำเพื่อประมวลผลสตรีมข้อมูลขนาดใหญ่ (กล่าวคือไม่มีขอบเขต) ในพื้นที่ฮีปคงที่ รหัสของฉันมีลักษณะดังนี้: type ErrorOrT[M[+_], A] = EitherT[M, Throwable, A] type ErrorOr[A] = ErrorOrT[IO, A] def processChunk(c: Chunk, idx: Long): Result def process(data: EnumeratorT[Chunk, ErrorOr]): IterateeT[Vector[(Chunk, Long)], ErrorOr, Vector[Result]] = Iteratee.fold[Vector[(Chunk, Long)], ErrorOr, Vector[Result]](Nil) { (rs, vs) => rs ++ vs map { case (c, …
106 scala  scalaz  iterate 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.