seguente è un esempio di giocattolo per dimostrare la stranezza e il punto della questione dei metodi di vita reale.Appiattisci i tipi dopo aver composto due errori
Come si può vedere anotherFunc
, dopo la mappatura su personList
espande tipo di \/[Throwable,List[\/[Throwable,String]]]
che non è destinato tipo di ritorno, ma effetto di map
ing personList
. ancora una volta che cosa è illustrato di seguito all'interno anotherFunc
è a scopo dimostrativo (in realtà non c'è cose più significative che accadono invece di Option("fakeString")
o nulla di tutto ciò.
requisito è quello di map
personList
e se è right
poi fare qualcosa con ogni elemento del List[Person]
restituita da right
(lato che è stato restituito dalla disgiunzione).
come semplificare/appiattire tipo di ritorno di anotherFunc
(per tornare \/[Throwable,List[String]]
). Può essere utilizzando altre combinatori?
case class Person(name :String)
def personList : \/[Throwable,List[Person]] ={
\/.fromTryCatch{
List(Person("John"))
}
}
def anotherFunc : \/[Throwable,List[\/[Throwable,String]]]= {
personList.map{ pl =>
pl.map{p =>
for{
s <- Option("fakeString").\/>(new Throwable("not found"))
} yield s
}
}
}
Non stavo nemmeno pensando a 'traverseU', buona risposta! – Noah
Grazie, @Noah, e mi dispiace per lo scoop-se "traverse" era tutto ciò che stavo aggiungendo avrei fatto un commento. –