scalaz 析取右侧的过滤值
Filtering values on right side of scalaz disjunction
我的结果由 scalaz 析取中的向量列表组成,我希望能够检查并过滤掉右侧的元素。
简化示例:
import scalaz._
import Scalaz._
type TL = Throwable \/ List[Vector[Int]]
val goodTL: TL = \/-(List(Vector(1,2,3),Vector(), Vector(2,3,4)))
如果我想从填充元素中删除空元素以及任何值 != 2,我可以执行以下操作:
for {
v <- goodTL
f = v.flatten
} yield for {
i <- f
if i != 2
} yield i
给出一个 scalaz.\/[Nothing,List[Int]] = \/-(List(1, 3, 3, 4))
这是我想要的,但我想知道是否有更简单的方法来实现它。
您的版本脱糖后的内容与以下内容非常相似:
goodTL.map(_.flatten.filter(_ != 2))
在这种情况下,我个人认为无糖版本更清楚发生了什么。
我的结果由 scalaz 析取中的向量列表组成,我希望能够检查并过滤掉右侧的元素。
简化示例:
import scalaz._
import Scalaz._
type TL = Throwable \/ List[Vector[Int]]
val goodTL: TL = \/-(List(Vector(1,2,3),Vector(), Vector(2,3,4)))
如果我想从填充元素中删除空元素以及任何值 != 2,我可以执行以下操作:
for {
v <- goodTL
f = v.flatten
} yield for {
i <- f
if i != 2
} yield i
给出一个 scalaz.\/[Nothing,List[Int]] = \/-(List(1, 3, 3, 4))
这是我想要的,但我想知道是否有更简单的方法来实现它。
您的版本脱糖后的内容与以下内容非常相似:
goodTL.map(_.flatten.filter(_ != 2))
在这种情况下,我个人认为无糖版本更清楚发生了什么。