หากฉันมี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]จาก