/* Ċ Ġ* ĠCopyright Ġ@ Ġ 2 0 1 8 ĠAt lassian ĠP ty ĠLtd Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ package Ġorg . j its i . j ibri . util Ċ Ċ // Ġimport Ġorg . f unktion ale . either . Either Ċ // Ġimport Ġorg . f unktion ale . either . either Try Ċ import Ġjava . io . IOException Ċ Ċ // Ġfun < T > Ġtry ( block : Ġ() Ġ-> ĠT ): ĠTry Result Ġ{ Ċ // Ċ // Ġ} Ċ Ċ // Ġfun Ġ< L , ĠR > ĠEither < L , ĠR >. if Error ( block : Ġ( e : ĠL ) Ġ-> ĠUnit ): ĠAny ? Ġ{ Ċ // ĠĠĠ Ġif Ġ( this Ġis ĠEither . Left < L , ĠR >) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġblock ( this . l ) Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġnull Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġreturn Ġtrue Ċ // Ġ} Ċ Ċ inline Ġfun Ġ< T > Ġreturn If Throws ( block : Ġ() Ġ-> ĠT ) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" caught Ġexception ") ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġdo Throw (): ĠBoolean Ġ{ ĊĠĠĠ Ġthrow ĠIOException () Ċ } Ċ Ċ fun Ġdo Not Throw (): ĠBoolean Ġ= Ġtrue Ċ Ċ fun Ġcall Other () Ġ{ Ċ // ĠĠĠ Ġeither Try Ġ{ Ġdo Not Throw () Ġ}. if Error Ġ{ Ġe Ġ-> Ġprintln (" error Ġ$ e ") Ġ} Ġ?: Ġreturn ĊĠĠĠ Ġreturn If Throws Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Throw () ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln (" after Ġtry ") Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ Ċ // ĠĠĠ Ġeither Try Ġ{ Ġdo Throw () Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ. fold ({ Ġerr Ġ-> Ġprintln (" error Ġ$ err ")}, Ġ{ Ġs Ġ-> Ġprintln (" success Ġ$ s ") }) Ċ // ĠĠĠ Ġeither Try Ġ{ Ġdo Not Throw () Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ. fold ({ Ġerr Ġ-> Ġprintln (" error Ġ$ err ")}, Ġ{ Ġs Ġ-> Ġprintln (" success Ġ$ s ") }) Ċ Ċ // ĠĠĠ Ġval Ġresult Ġ= Ġeither Try Ġ{ Ġdo Throw () Ġ} Ċ Ċ // ĠĠĠ Ġeither Try Ġ{ Ġdo Throw () Ġ}. if Error Ġ{ Ġe Ġ-> Ġprintln (" Error !: Ġ$ e ") Ġ} Ċ // ĠĠĠ Ġeither Try Ġ{ Ġdo Not Throw () Ġ}. if Error Ġ{ Ġprintln (" Error !") } ĊĠĠĠ Ġcall Other () Ċ } Ċ