หากฉันมี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 &= en).run: Task[Int]
แต่ฉันจะทำอย่างไรเมื่อโมเดอเรเตอร์นั้น "ใหญ่" กว่าโมนันแจงนับ?
val en: EnumeratorT[String, Id] = ...
val it: IterateeT[String, Task, Int] = ...
it &= ???
ดูเหมือนจะไม่มีHoist
ตัวอย่างสำหรับEnumeratorT
หรือวิธีการ "ยก" ที่ชัดเจนใด ๆ
Enumerator
ก็เป็นเพียงแหล่งที่มีประสิทธิภาพใช่มั้ย รู้สึกว่าฉันควรจะใช้สิ่งที่สามารถA
จัดหาTask[A]
ได้
Enumerator
เป็นเพียง wrapper รอบ aStepT => IterateeT
ซึ่งแนะนำว่าคุณจะต้อง "ก้าวลง"StepT[E, BigMonad, A]
จาก