过滤scalaz析取右侧的值

Gav*_*vin 5 scala scalaz

我有一个结果包含一个scalaz析取中的向量列表,我希望能够从右侧检查和过滤掉元素.

简化示例:

import scalaz._
import Scalaz._

type TL = Throwable \/ List[Vector[Int]]

val goodTL: TL = \/-(List(Vector(1,2,3),Vector(), Vector(2,3,4)))
Run Code Online (Sandbox Code Playgroud)

如果我想从填充的元素中删除空元素以及任何值!= 2,我可以执行以下操作:

for {
  v <- goodTL
  f = v.flatten
} yield for {
  i <- f
  if i != 2
} yield i
Run Code Online (Sandbox Code Playgroud)

给出一个scalaz.\/[Nothing,List[Int]] = \/-(List(1, 3, 3, 4))我想要的东西,但我想知道是否有一个不太复杂的方法来实现这一目标.

Tra*_*own 3

您的版本脱糖后的内容与以下内容非常相似:

goodTL.map(_.flatten.filter(_ != 2))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我个人发现无糖版本更清楚地了解发生了什么。