package Ġarrow . data Ċ Ċ import Ġarrow . Kind Ċ import Ġarrow . core .* Ċ import Ġarrow . high er kind Ċ import Ġarrow . type classes . Applic ative Ċ import Ġarrow . type classes . Sem ig roup Ċ Ċ type alias ĠValid ated N el < E , ĠA > Ġ= ĠValid ated < N el < E >, ĠA > Ċ type alias ĠValid < A > Ġ= ĠValid ated . Valid < A > Ċ type alias ĠInvalid < E > Ġ= ĠValid ated . Invalid < E > Ċ Ċ /** Ċ Ġ* ĠPort Ġof Ġhttps :// github . com / type level / cats / blob / master / core / src / main / scala / cats / data / Validated . scala Ċ Ġ*/ Ċ @ high er kind Ċ sealed Ġclass ĠValid ated < out ĠE , Ġout ĠA > Ġ: ĠValid ated Of < E , ĠA > Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġfun Ġ< E , ĠA > Ġinvalid N el ( e : ĠE ): ĠValid ated N el < E , ĠA > Ġ= ĠInvalid ( Non Empty List ( e , ĠlistOf ())) ĊĊĠĠĠ Ġfun Ġ< E , ĠA > Ġvalid N el ( a : ĠA ): ĠValid ated N el < E , ĠA > Ġ= ĠValid ( a ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġa Ġ` Try < A >` Ġto Ġa Ġ` Validated < Throwable , ĠA >`. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< A > Ġfrom Try ( t : ĠTry < A >): ĠValid ated < Throwable , ĠA > Ġ= Ġt . fold ({ ĠInvalid ( it ) Ġ}, Ġ{ ĠValid ( it ) Ġ}) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġan Ġ` Either < A , ĠB >` Ġto Ġan Ġ` Validated < A , ĠB >`. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< E , ĠA > Ġfrom Either ( e : ĠEither < E , ĠA >): ĠValid ated < E , ĠA > Ġ= Ġe . fold ({ ĠInvalid ( it ) Ġ}, Ġ{ ĠValid ( it ) Ġ}) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġan Ġ` Option < B >` Ġto Ġan Ġ` Validated < A , ĠB >`, Ġwhere Ġthe Ġprovided Ġ` if None ` Ġvalues Ġis Ġreturned Ġon ĊĠĠĠĠ Ġ* Ġthe Ġinvalid Ġof Ġthe Ġ` Validated ` Ġwhen Ġthe Ġspecified Ġ` Option ` Ġis Ġ` None `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< E , ĠA > Ġfrom Option ( o : ĠOption < A >, Ġif None : Ġ() Ġ-> ĠE ): ĠValid ated < E , ĠA > Ġ= ĊĠĠĠĠĠ Ġo . fold ( ĊĠĠĠĠĠĠĠ Ġ{ ĠInvalid ( if None ()) Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĠValid ( it ) Ġ} ĊĠĠĠĠĠ Ġ) ĊĊĠ Ġ} ĊĊĠ Ġdata Ġclass ĠValid < out ĠA >( val Ġa : ĠA ) Ġ: ĠValid ated < Nothing , ĠA >() ĊĊĠ Ġdata Ġclass ĠInvalid < out ĠE >( val Ġe : ĠE ) Ġ: ĠValid ated < E , ĠNothing >() ĊĊĠ Ġinline Ġfun Ġ< B > Ġfold ( fe : Ġ( E ) Ġ-> ĠB , Ġfa : Ġ( A ) Ġ-> ĠB ): ĠB Ġ= ĊĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠ Ġis ĠValid Ġ-> Ġfa ( a ) ĊĠĠĠĠĠ Ġis ĠInvalid Ġ-> Ġ( fe ( e )) ĊĠĠĠ Ġ} ĊĊĠ Ġval ĠisValid Ġ= ĊĠĠĠ Ġfold ({ Ġfalse Ġ}, Ġ{ Ġtrue Ġ}) ĊĠ Ġval Ġis Invalid Ġ= ĊĠĠĠ Ġfold ({ Ġtrue Ġ}, Ġ{ Ġfalse Ġ}) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠIs Ġthis ĠValid Ġand Ġmatching Ġthe Ġgiven Ġpredicate ĊĠĠ Ġ*/ ĊĠ Ġfun Ġexist ( predicate : Ġ( A ) Ġ-> ĠBoolean ): ĠBoolean Ġ= Ġfold ({ Ġfalse Ġ}, Ġ{ Ġpredicate ( it ) Ġ}) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠConverts Ġthe Ġvalue Ġto Ġan ĠEither < E , ĠA > ĊĠĠ Ġ*/ ĊĠ Ġfun Ġto Either (): ĠEither < E , ĠA > Ġ= Ġfold ({ ĠLeft ( it ) Ġ}, Ġ{ ĠRight ( it ) Ġ}) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠReturns ĠValid Ġvalues Ġwrapped Ġin ĠSome , Ġand ĠNone Ġfor ĠInvalid Ġvalues ĊĠĠ Ġ*/ ĊĠ Ġfun Ġto Option (): ĠOption < A > Ġ= Ġfold ({ ĠNone Ġ}, Ġ{ ĠSome ( it ) Ġ}) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠConvert Ġthis Ġvalue Ġto Ġa Ġsingle Ġelement ĠList Ġif Ġit Ġis ĠValid , ĊĠĠ Ġ* Ġotherwise Ġreturn Ġan Ġempty ĠList ĊĠĠ Ġ*/ ĊĠ Ġfun Ġto List (): ĠList < A > Ġ= Ġfold ({ ĠlistOf () Ġ}, Ġ{ ĠlistOf ( it ) Ġ}) ĊĊĠ Ġ/** ĠLift Ġthe ĠInvalid Ġvalue Ġinto Ġa ĠNon Empty List . Ġ*/ ĊĠ Ġfun Ġto Validated N el (): ĠValid ated N el < E , ĠA > Ġ= ĊĠĠĠ Ġfold ( ĊĠĠĠĠĠ Ġ{ Ġinvalid N el ( it ) Ġ}, ĊĠĠĠĠĠ Ġ{ ĠValid ( it ) Ġ} ĊĠĠĠ Ġ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠConvert Ġto Ġan ĠEither , Ġapply Ġa Ġfunction , Ġconvert Ġback . ĠThis Ġis Ġhandy ĊĠĠ Ġ* Ġwhen Ġyou Ġwant Ġto Ġuse Ġthe ĠMonad ic Ġproperties Ġof Ġthe ĠEither Ġtype . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġ< EE , ĠB > Ġwith Either ( f : Ġ( Either < E , ĠA >) Ġ-> ĠEither < EE , ĠB >): ĠValid ated < EE , ĠB > Ġ= Ġfrom Either ( f ( to Either ())) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠValid ated Ġis Ġa Ġ[[ functor . B if un ctor ]], Ġthis Ġmethod Ġapplies Ġone Ġof Ġthe ĊĠĠ Ġ* Ġgiven Ġfunctions . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġ< EE , ĠAA > Ġb imap ( fe : Ġ( E ) Ġ-> ĠEE , Ġfa : Ġ( A ) Ġ-> ĠAA ): ĠValid ated < EE , ĠAA > Ġ= Ġfold ({ ĠInvalid ( fe ( it )) Ġ}, Ġ{ ĠValid ( fa ( it )) Ġ}) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠApply Ġa Ġfunction Ġto Ġa ĠValid Ġvalue , Ġreturning Ġa Ġnew ĠValid Ġvalue ĊĠĠ Ġ*/ ĊĠ Ġfun Ġ< B > Ġmap ( f : Ġ( A ) Ġ-> ĠB ): ĠValid ated < E , ĠB > Ġ= Ġb imap (:: identity ) Ġ{ Ġf ( it ) Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠApply Ġa Ġfunction Ġto Ġan ĠInvalid Ġvalue , Ġreturning Ġa Ġnew ĠInvalid Ġvalue . ĊĠĠ Ġ* ĠOr , Ġif Ġthe Ġoriginal Ġvalid Ġwas ĠValid , Ġreturn Ġit . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġ< EE > Ġleft Map ( f : Ġ( E ) Ġ-> ĠEE ): ĠValid ated < EE , ĠA > Ġ= Ġb imap ({ Ġf ( it ) Ġ}, Ġ:: identity ) ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġapply Ġthe Ġgiven Ġfunction Ġto Ġthe Ġvalue Ġwith Ġthe Ġgiven ĠB Ġwhen ĊĠĠ Ġ* Ġvalid , Ġotherwise Ġreturn Ġthe Ġgiven ĠB ĊĠĠ Ġ*/ ĊĠ Ġfun Ġ< B > Ġfold Left ( b : ĠB , Ġf : Ġ( B , ĠA ) Ġ-> ĠB ): ĠB Ġ= Ġfold ({ Ġb Ġ}, Ġ{ Ġf ( b , Ġit ) Ġ}) ĊĊĠ Ġfun Ġ< B > Ġfold Right ( lb : ĠEval < B >, Ġf : Ġ( A , ĠEval < B >) Ġ-> ĠEval < B >): ĠEval < B > Ġ= ĊĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠ Ġis ĠValid Ġ-> Ġf ( this . a , Ġlb ) ĊĠĠĠĠĠ Ġis ĠInvalid Ġ-> Ġlb ĊĠĠĠ Ġ} ĊĊĠ Ġfun Ġswap (): ĠValid ated < A , ĠE > Ġ= Ġfold ({ ĠValid ( it ) Ġ}, Ġ{ ĠInvalid ( it ) Ġ}) Ċ } Ċ Ċ /** Ċ Ġ* ĠReturn Ġthe ĠValid Ġvalue , Ġor Ġthe Ġdefault Ġif ĠInvalid Ċ Ġ*/ Ċ fun Ġ< E , ĠB > ĠValid ated Of < E , ĠB >. getOrElse ( default : Ġ() Ġ-> ĠB ): ĠB Ġ= ĊĠĠĠ Ġfix (). fold ({ Ġdefault () Ġ}, Ġ:: identity ) Ċ Ċ /** Ċ Ġ* ĠReturn Ġthe ĠValid Ġvalue , Ġor Ġnull Ġif ĠInvalid Ċ Ġ*/ Ċ fun Ġ< E , ĠB > ĠValid ated Of < E , ĠB >. or Null (): ĠB ? Ġ= ĊĠ Ġget OrElse Ġ{ Ġnull Ġ} Ċ Ċ /** Ċ Ġ* ĠReturn Ġthe ĠValid Ġvalue , Ġor Ġthe Ġresult Ġof Ġf Ġif ĠInvalid Ċ Ġ*/ Ċ fun Ġ< E , ĠB > ĠValid ated Of < E , ĠB >. value Or ( f : Ġ( E ) Ġ-> ĠB ): ĠB Ġ= ĊĠ Ġfix (). fold ({ Ġf ( it ) Ġ}, Ġ:: identity ) Ċ Ċ /** Ċ Ġ* ĠIf Ġ` this ` Ġis Ġvalid Ġreturn Ġ` this `, Ġotherwise Ġif Ġ` that ` Ġis Ġvalid Ġreturn Ġ` that `, Ġotherwise Ġcombine Ġthe Ġfailures . Ċ Ġ* ĠThis Ġis Ġsimilar Ġto Ġ[[ orElse ]] Ġexcept Ġthat Ġhere Ġfailures Ġare Ġaccumulated . Ċ Ġ*/ Ċ fun Ġ< E , ĠA > ĠValid ated Of < E , ĠA >. find Valid ( SE : ĠSem ig roup < E >, Ġthat : Ġ() Ġ-> ĠValid ated < E , ĠA >): ĠValid ated < E , ĠA > Ġ= ĊĠ Ġfix (). fold ( ĊĊĠĠĠ Ġ{ Ġe Ġ-> ĊĠĠĠĠĠ Ġthat (). fold ( ĊĠĠĠĠĠĠĠ Ġ{ Ġee Ġ-> ĠInvalid ( SE . run Ġ{ Ġe . combine ( ee ) Ġ}) Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ ĠValid ( it ) Ġ} ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}, ĊĠĠĠ Ġ{ ĠValid ( it ) Ġ} ĊĠ Ġ) Ċ Ċ /** Ċ Ġ* ĠReturn Ġthis Ġif Ġit Ġis ĠValid , Ġor Ġelse Ġfall Ġback Ġto Ġthe Ġgiven Ġdefault . Ċ Ġ* ĠThe Ġfunctionality Ġis Ġsimilar Ġto Ġthat Ġof Ġ[[ find Valid ]] Ġexcept Ġfor Ġfailure Ġaccum ulation , Ċ Ġ* Ġwhere Ġhere Ġonly Ġthe Ġerror Ġon Ġthe Ġright Ġis Ġpreserved Ġand Ġthe Ġerror Ġon Ġthe Ġleft Ġis Ġignored . Ċ Ġ*/ Ċ fun Ġ< E , ĠA > ĠValid ated Of < E , ĠA >. orElse ( default : Ġ() Ġ-> ĠValid ated < E , ĠA >): ĠValid ated < E , ĠA > Ġ= ĊĠ Ġfix (). fold ( ĊĠĠĠ Ġ{ Ġdefault () Ġ}, ĊĠĠĠ Ġ{ ĠValid ( it ) Ġ} ĊĠ Ġ) Ċ Ċ /** Ċ Ġ* ĠFrom ĠApply : Ċ Ġ* Ġif Ġboth Ġthe Ġfunction Ġand Ġthis Ġvalue Ġare ĠValid , Ġapply Ġthe Ġfunction Ċ Ġ*/ Ċ fun Ġ< E , ĠA , ĠB > ĠValid ated Of < E , ĠA >. ap ( SE : ĠSem ig roup < E >, Ġf : ĠValid ated < E , Ġ( A ) Ġ-> ĠB >): ĠValid ated < E , ĠB > Ġ= ĊĠ Ġfix (). fold ( ĊĠĠĠ Ġ{ Ġe Ġ-> Ġf . fold ({ ĠInvalid ( SE . run Ġ{ Ġit . combine ( e ) Ġ}) Ġ}, Ġ{ ĠInvalid ( e ) Ġ}) Ġ}, ĊĠĠĠ Ġ{ Ġa Ġ-> Ġf . fold (:: Invalid ) Ġ{ ĠValid ( it ( a )) Ġ} Ġ} ĊĠ Ġ) Ċ Ċ fun Ġ< E , ĠA > ĠValid ated Of < E , ĠA >. handle Left With ( f : Ġ( E ) Ġ-> ĠValid ated Of < E , ĠA >): ĠValid ated < E , ĠA > Ġ= ĊĠ Ġfix (). fold ({ Ġf ( it ). fix () Ġ}, Ġ:: Valid ) Ċ Ċ fun Ġ< G , ĠE , ĠA , ĠB > ĠValid ated Of < E , ĠA >. traverse ( GA : ĠApplic ative < G >, Ġf : Ġ( A ) Ġ-> ĠKind < G , ĠB >): ĠKind < G , ĠValid ated < E , ĠB >> Ġ= ĠGA . run Ġ{ ĊĠ Ġfix (). fold ({ Ġe Ġ-> Ġjust ( Invalid ( e )) Ġ}, Ġ{ Ġa Ġ-> Ġf ( a ). map (:: Valid ) Ġ}) Ċ } Ċ Ċ fun Ġ< G , ĠE , ĠA > ĠValid ated Of < E , ĠKind < G , ĠA >> . sequence ( GA : ĠApplic ative < G >): ĠKind < G , ĠValid ated < E , ĠA >> Ġ= ĊĠ Ġfix (). traverse ( GA , Ġ:: identity ) Ċ Ċ inline Ġfun Ġ< E , ĠA > ĠValid ated Of < E , ĠA >. combine ( SE : ĠSem ig roup < E >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSA : ĠSem ig roup < A >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy : ĠValid ated Of < E , ĠA >): ĠValid ated < E , ĠA > Ġ= ĊĠ Ġy . fix (). let Ġ{ Ġthat Ġ-> ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠ Ġthis Ġis ĠValid Ġ&& Ġthat Ġis ĠValid Ġ-> ĠValid ( SA . run Ġ{ Ġa . combine ( that . a ) Ġ}) ĊĠĠĠĠĠ Ġthis Ġis ĠInvalid Ġ&& Ġthat Ġis ĠInvalid Ġ-> ĠInvalid ( SE . run Ġ{ Ġe . combine ( that . e ) Ġ}) ĊĠĠĠĠĠ Ġthis Ġis ĠInvalid Ġ-> Ġthis ĊĠĠĠĠĠ Ġelse Ġ-> Ġthat ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ Ċ fun Ġ< E , ĠA > ĠValid ated Of < E , ĠA >. combine K ( SE : ĠSem ig roup < E >, Ġy : ĠValid ated Of < E , ĠA >): ĠValid ated < E , ĠA > Ġ{ ĊĠ Ġval Ġx ev Ġ= Ġfix () ĊĠ Ġval Ġy ev Ġ= Ġy . fix () ĊĠ Ġreturn Ġwhen Ġ( xe v ) Ġ{ ĊĠĠĠ Ġis ĠValid Ġ-> Ġx ev ĊĠĠĠ Ġis ĠInvalid Ġ-> Ġwhen Ġ( y ev ) Ġ{ ĊĠĠĠĠĠ Ġis ĠInvalid Ġ-> ĠInvalid ( SE . run Ġ{ Ġx ev . e . combine ( y ev . e ) Ġ}) ĊĠĠĠĠĠ Ġis ĠValid Ġ-> Ġy ev ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠConverts Ġthe Ġvalue Ġto Ġan ĠI or < E , ĠA > Ċ Ġ*/ Ċ fun Ġ< E , ĠA > ĠValid ated Of < E , ĠA >. to I or (): ĠI or < E , ĠA > Ġ= ĊĠ Ġfix (). fold ({ ĠI or . Left ( it ) Ġ}, Ġ{ ĠI or . Right ( it ) Ġ}) Ċ Ċ fun Ġ< E , ĠA > ĠA . valid (): ĠValid ated < E , ĠA > Ġ= ĊĠ ĠValid ( this ) Ċ Ċ fun Ġ< E , ĠA > ĠE . invalid (): ĠValid ated < E , ĠA > Ġ= ĊĠ ĠInvalid ( this ) Ċ Ċ fun Ġ< E , ĠA > ĠA . valid N el (): ĠValid ated N el < E , ĠA > Ġ= ĊĠ ĠValid ated . valid N el ( this ) Ċ Ċ fun Ġ< E , ĠA > ĠE . invalid N el (): ĠValid ated N el < E , ĠA > Ġ= ĊĠ ĠValid ated . invalid N el ( this ) Ċ