Scalaz迭代:“提升”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]
如果枚举器monad比iteratee monad“大”,我可以用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 monad比枚举器monad“更大”时,我该怎么做?
val en: EnumeratorT[String, Id] = ... val it: IterateeT[String, Task, Int] = ... it &= ???
EnumeratorT
似乎没有Hoist
实例,也没有任何明显的“提升”方法。