如何将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
中定义,因此值得通过文件查找可能有用的转换。