Филтриране на стойности от дясната страна на 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)))

Ако искам да премахна празен елемент, а също и всякакви стойности != 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)), което е това, което искам, но бих искал да знам дали има по-малко сложен начин за постигане на това.


person Gavin    schedule 06.03.2015    source източник


Отговори (1)


Вашата версия обеззахарява до нещо много подобно на следното:

goodTL.map(_.flatten.filter(_ != 2))

Това е случай, в който аз лично намирам версията без захар много по-ясна за случващото се.

person Travis Brown    schedule 06.03.2015
comment
Без захар определено изглежда по-добре. Благодаря. - person Gavin; 06.03.2015