Комбинирайте левите страни от вложен тип резултат от дизюнкция

Ако имам тип \/[Errs, \/[Errs, Boolean]] и искам да комбинирам две леви (две Errs), какъв е най-добрият начин да го направя \/[Errs,Boolean], където новият Errs ще добавя две Errs от две lefts от по-ранния тип. Errs не е нищо друго освен case class

case class Errs(errors: List[Err])

И Err е

 case class Err(exceptionMessage: String, customMessage: String, statusCode: Int, extraInfo: Option[String] = None)

Опитвам се да преобразувам type1 = \/[Errs, \/[Errs,Boolean]] в type2 = \/[Errs,Boolean], където Errs в type2 трябва да се "слее" Errs (без да губя информация за left от комбинирането на две дизюнкции.


person Vikas Pandya    schedule 02.03.2015    source източник
comment
Малко не е ясно какво питаш. Искате ли \/[Errs, \/[Errs, Boolean]] => \/[Errs, \/[Errs, Boolean]] => \/[Errs, Boolean]?   -  person Travis Brown    schedule 02.03.2015
comment
@TravisBrown : Здравей Травис, вярно е. Актуализирах въпроса, добавяйки повече яснота. уведомете ме дали трябва да добавя пример, ако все още не е ясно? мислех за EitherT, но не бях сигурен дали това е правилният начин тук? някаква идея?   -  person Vikas Pandya    schedule 02.03.2015
comment
Благодаря! — Все пак не разбирам как сливането може да е проблем? t1.flatMap(identity) работи ли?   -  person Travis Brown    schedule 02.03.2015
comment
@TravisBrown : да. t1.flatMap(identity) работи. Благодаря   -  person Vikas Pandya    schedule 03.03.2015


Отговори (1)


За изчерпателност: тъй като това е дизюнкция, никога няма да се притеснявате за грешки при „сливане“ – или цялото нещо е Errs от лявата страна, или е дясно с Errs отляво. Не може и двете едновременно.

Ако искате да свиете двете нива, t1.flatMap(identity) ще превърне Errs \/ (Errs \/ Boolean) в обикновено старо Errs \/ Boolean.

person Travis Brown    schedule 23.03.2015