2015-03-06 5 views
5

Mam wynik składający się z listy wektorów w odróżnieniu skalaza i chcę móc badać i odfiltrowywać elementy z prawej strony.Filtrowanie wartości po prawej stronie podziału skalazu

uproszczony przykład:

import scalaz._ 
import Scalaz._ 

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

val goodTL: TL = \/-(List(Vector(1,2,3),Vector(), Vector(2,3,4))) 

Jeśli chcę usunąć pusty element a także wszelkie wartości = 2 z elementami zaludnionych mogę wykonać następujące czynności:

for { 
    v <- goodTL 
    f = v.flatten 
} yield for { 
    i <- f 
    if i != 2 
} yield i 

dając scalaz.\/[Nothing,List[Int]] = \/-(List(1, 3, 3, 4)) który jest co Chcę, ale chciałbym wiedzieć, czy istnieje mniej zawiły sposób na osiągnięcie tego.

Odpowiedz

3

Twoja wersja desugars coś bardzo podobnego do poniższego:

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

Jest to przypadek, w którym ja osobiście znaleźć wersję bez cukru dużo jaśniejszy, co się dzieje.

+0

Bez cukru jest zdecydowanie ładniejszy. Dzięki. – Gavin