Me gustaría saber si es posible crear algún tipo de "cadena de llamada de método", con todos los métodos devolviendo el mismo, ya sea [Error, Resultado].Llamadas al método de encadenamiento con
Lo que me gustaría hacer es: llamar a todos los métodos de forma sucesiva, y cuando el método devuelve un Left (Error), detenga las llamadas al método y devuelva la primera Left encontrada en la cadena de llamadas.
He intentado algunas cosas, con pliegue, mapa, proyecciones ... pero soy nuevo en Scala y no encuentro ninguna solución elegante.
he tryed alguna cosa así:
def createUserAndMandatoryCategories(user: User) : Either[Error,User] = {
User.create(user).right.map {
Logger.info("User created")
Category.create(Category.buildRootCategory(user)).right.map {
Logger.info("Root category created")
Category.create(Category.buildInboxCategory(user)).right.map {
Logger.info("Inbox category created")
Category.create(Category.buildPeopleCategory(user)).right.map {
Logger.info("People category created")
Category.create(Category.buildTrashCategory(user)).right.map {
Logger.info("Trash category created")
Logger.info("All categories successfully created created")
Right(user)
}
}
}
}
}
}
Pero no funciona. Y de todos modos, realmente no me gusta la sangría que toma. Además me gustaría transformar el error en una nueva cadena que describe el problema (supongo que debería utilizar doblar?)
Busco algo escrito así:
val result : Either[String,CallResult] = call1.something("error 1 description")
.call2.something("error 2 description")
.call3.something("error 3 description")
.call4.something("error 4 description")
¿Es posible hacer tal cosa con Scala? ¿Tal vez usando ambos Either y Option?
Una restricción sería también que si la primera llamada falla, las otras llamadas no deberían realizarse. No quiero una solución donde llamo a todo y luego me una a los eithers.
Gracias!
Hola, Rasgo Validación de scalaz es lo que busca – fp4me
Esta es la descripción de la mónada tampoco. –