package Ġcom . github . rs 3 v ans . mon ad ik Ċ Ċ sealed Ġclass ĠTry < out ĠT Ġ: ĠAny > Ġ{ ĊĠĠĠ Ġabstract Ġval Ġvalue : ĠT ĊĠĠĠ Ġabstract Ġval Ġexception : ĠException ĊĊĠĠĠ Ġval Ġis Success Ġ= Ġthis Ġis ĠSuccess ĊĠĠĠ Ġval Ġis Failure Ġ= Ġthis Ġis ĠFailure ĊĊĠĠĠ Ġoperator Ġfun Ġcomponent 1 () Ġ= Ġif Ġ( is Success ) Ġvalue Ġelse Ġnull ĊĠĠĠ Ġoperator Ġfun Ġcomponent 2 () Ġ= Ġif Ġ( is Failure ) Ġexception Ġelse Ġnull ĊĊĠĠĠ Ġoperator Ġfun Ġnot () Ġ= Ġis Failure ĊĊĠĠĠ Ġclass ĠSuccess < out ĠT Ġ: ĠAny >( override Ġval Ġvalue : ĠT ) Ġ: ĠTry < T >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġexception : ĠException ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġthrow ĠNot A FailureException () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFailure ( override Ġval Ġexception : ĠException ) Ġ: ĠTry < Nothing >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġvalue : ĠNothing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġthrow Ġexception ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< U Ġ: ĠAny > Ġflat Map ( transformer : Ġ( T ) Ġ-> ĠTry < U >): ĠTry < U > Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠTry . Success Ġ-> Ġtransformer ( value ) ĊĠĠĠĠĠĠĠ Ġis ĠTry . Failure Ġ-> Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< U Ġ: ĠAny > Ġmap ( transformer : Ġ( T ) Ġ-> ĠU ): ĠTry < U > Ġ= Ġflat Map Ġ{ Ġt Ġ-> ĠTry < U > Ġ{ Ġtransformer ( t ) Ġ} Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġfold ( left : Ġ( T ) Ġ-> ĠUnit , Ġright : Ġ( Exception ) Ġ-> ĠUnit ): ĠTry < T > Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSuccess Ġ-> Ġleft ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFailure Ġ-> Ġright ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġif Success ( left : Ġ( T ) Ġ-> ĠUnit ): ĠTry < T > Ġ= Ġfold ( left , Ġ{}) ĊĊĠĠĠ Ġinline Ġfun Ġif Failure ( right : Ġ( Exception ) Ġ-> ĠUnit ): ĠTry < T > Ġ= Ġfold ({}, Ġright ) ĊĊĠĠĠ Ġfun Ġthrow If Failure () Ġ= Ġif Failure Ġ{ Ġthrow Ġit Ġ} ĊĊĠĠĠ Ġfun Ġto Option (): ĠOption < T > Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠSuccess Ġ-> ĠOption . Some ( value ) ĊĠĠĠĠĠĠĠ Ġis ĠFailure Ġ-> ĠOption . None ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto Either (): ĠEither < T , ĠException > Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠSuccess Ġ-> ĠEither . Left ( value ) ĊĠĠĠĠĠĠĠ Ġis ĠFailure Ġ-> ĠEither . Right ( exception ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinline Ġoperator Ġfun Ġ< T Ġ: ĠAny > Ġinvoke ( t : Ġ() Ġ-> ĠT ): ĠTry < T > Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSuccess ( t ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFailure ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< T Ġ: ĠAny > ĠTry < T >. recover With ( transformer : Ġ( Exception ) Ġ-> ĠTry < T >): ĠTry < T > Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠTry . Success Ġ-> Ġthis ĊĠĠĠ Ġis ĠTry . Failure Ġ-> Ġtransformer ( exception ) Ċ } Ċ Ċ inline Ġfun Ġ< T Ġ: ĠAny > ĠTry < T >. recover ( transformer : Ġ( Exception ) Ġ-> ĠT ): ĠTry < T > Ġ= Ġrecover With Ġ{ ĊĠĠĠ ĠTry < T > Ġ{ Ġtransformer ( exception ) Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< T Ġ: ĠAny > ĠTry < T >. orElse Get ( t : Ġ() Ġ-> ĠT ): ĠT Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠTry . Success Ġ-> Ġvalue ĊĠĠĠ Ġis ĠTry . Failure Ġ-> Ġt () Ċ } Ċ Ċ fun Ġ< T Ġ: ĠAny > ĠTry < T >. orElse ( t : ĠT ): ĠT Ġ= Ġor Else Get Ġ{ Ġt Ġ} Ċ Ċ class ĠNot A FailureException Ġ: ĠException (" not Ġa Ġfailure ")