如何将Scalaz-Stream Process [F,Option [T]]转换为Process [F,T]?

问题描述:

我有一个scalaz流过程:如何将Scalaz-Stream Process [F,Option [T]]转换为Process [F,T]?

val src = Process.repeatEval(Task(in.take())) : Process[Task, Option[T]] 

如何摆脱期权?

到目前为止,我已经使用收集,但给人的感觉并不优雅:

src.collect { case Some(x) => x } : Process[Task, T] 

有没有更好的办法?

你的解决方案是正确的,但是实现在scalaz流(< = 0.8)已经存在,在process1.stripNone

src.pipe(process1.stripNone) 

src |> process1.stripNone 

许多其它变换(可能是有状态)在process1中定义,因此值得通过文件查找可能有用的转换。