如果有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
“提升” iterae以匹配:
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 &= ???
似乎没有的Hoist
实例EnumeratorT
,也没有任何明显的“提升”方法。
是的,我发现当我尝试直接实现它时。但是从逻辑
—
lmm 2014年
Enumerator
上讲,这只是有效的资源,对吗?这感觉就像我应该能够使用可以提供的东西A
来供应Task[A]
。
我对Scala的了解不多,无法提供答案,但是您不能定义自己的类型并为其提供一种提升机制吗?
—
Rob
不,那根本不是一回事,这是另一种“提升”。
—
lmm
@TravisBrown,如果您要编写此内容,那么现在有一笔赏金。
—
亚伦·霍尔
Enumerator
实际上只是对a的包装StepT => IterateeT
,这表明您需要“下调”从StepT[E, BigMonad, A]
。