package Ġcn . ck x ily . ck xc . util Ċ Ċ sealed Ġclass ĠEither < out ĠT , Ġout ĠU > Ġ{ Ċ ĉ fun Ġas Left () Ġ= Ġ( this Ġas ĠLeft < T >). obj ĊĊ ĉ fun Ġas Right () Ġ= Ġ( this Ġas ĠRight < U >). obj ĊĊ ĉ fun Ġas Left Safe () Ġ= Ġ( this Ġas ? ĠLeft < T >) ?. obj ĊĊ ĉ fun Ġas Right Safe () Ġ= Ġ( this Ġas ? ĠRight < U >) ?. obj ĊĊ ĉ inline Ġfun Ġ< R > Ġeither ( f : Ġ( T ) Ġ-> ĠR , Ġg : Ġ( U ) Ġ-> ĠR ) Ġ= Ġwhen Ġ( this ) Ġ{ Ċĉ ĉ is ĠLeft Ġ-> Ġf ( obj ) Ċĉ ĉ is ĠRight Ġ-> Ġg ( obj ) Ċ ĉ } ĊĊ ĉ override Ġfun ĠtoString () Ġ= Ġeither ({" $ it "}, Ġ{" $ it "}) Ċ } Ċ Ċ class ĠLeft < T >( var Ġobj : ĠT ) Ġ: ĠEither < T , ĠNothing >() Ċ Ċ class ĠRight < U >( var Ġobj : ĠU ) Ġ: ĠEither < Nothing , ĠU >() Ċ Ċ fun Ġaddress Of ( any : ĠAny ) Ġ= Ġ"< @ ${ any . hashCode (). toString ( 1 6 )} >" Ċ