2015-03-06 9 views
5

Ich habe ein Ergebnis, bestehend aus einer Liste von Vektoren in einer Scalaz-Disjunktion, und ich möchte Elemente aus der rechten Seite untersuchen und herausfiltern können.Filterwerte auf der rechten Seite der Scalaz-Disjunktion

vereinfachtes Beispiel:

import scalaz._ 
import Scalaz._ 

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

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

Wenn ich leer Element und auch alle Werte = 2 aus besiedelten Elemente entfernen, möchte ich folgendes tun:

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

ein scalaz.\/[Nothing,List[Int]] = \/-(List(1, 3, 3, 4)) geben, welche, was Ich möchte, aber ich würde gerne wissen, ob es einen weniger komplizierten Weg gibt, dies zu erreichen.

Antwort

3

Ihre Version desugars zu etwas sehr ähnlich wie die folgenden:

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

Dies ist ein Fall, wo ich persönlich die zuckerfreie Version viel klarer finden, was vor sich geht.

+0

Zuckerfrei ist definitiv schöner. Vielen Dank. – Gavin

Verwandte Themen