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实例,也没有任何明显的“提升”方法。