내가 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 모나드보다 "더 큰"경우 up
, 더 일반적으로 Hoist
다음과 같이 일치자를 "리프팅" 할 수 있습니다 .
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]
그러나 iteratee 모나드가 열거 자 모나드보다 "더 큰"경우 어떻게해야합니까?
val en: EnumeratorT[String, Id] = ...
val it: IterateeT[String, Task, Int] = ...
it &= ???
에 대한 Hoist
인스턴스 EnumeratorT
나 명백한 "리프트"방법 이없는 것 같습니다 .
Enumerator
효과적인 소스 일뿐입니다. 내가 제공 할 수있는 일이 사용할 수있을 것 같은이 느낌 A
공급을 Task[A]
.
Enumerator
정말 주위에 단지 래퍼StepT => IterateeT
는 "스텝 다운"을해야합니다 제안, A로부터StepT[E, BigMonad, A]
.