package Ġio . sm al libs . pil in . standard . either Ċ Ċ import Ġio . sm al libs . pil in . core . Standard . cur ry Ċ import Ġio . sm al libs . pil in . standard . either . Either . Either K Ċ import Ġio . sm al libs . pil in . type . App Ċ import Ġio . sm al libs . pil in . type . Fun Ċ Ċ sealed Ġclass ĠEither < out ĠL , Ġout ĠR > Ġ: ĠApp < Either K < L >, ĠR > Ġ{ ĊĠĠĠ Ġdata Ġclass ĠLeft < out ĠL >( val Ġvalue : ĠL ) Ġ: ĠEither < L , ĠNothing >() ĊĠĠĠ Ġdata Ġclass ĠRight < out ĠR >( val Ġvalue : ĠR ) Ġ: ĠEither < Nothing , ĠR >() ĊĊĠĠĠ Ġ// ĠThis Ġcode Ġcan Ġbe Ġautomatically Ġgenerated ĊĠĠĠ Ġclass ĠEither K < out ĠL > Ġprivate Ġconstructor () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġ< L , ĠR > ĠApp < Either K < L >, ĠR >. fix : ĠEither < L , ĠR > Ġget () Ġ= Ġthis Ġas ĠEither < L , ĠR > ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġ< L , ĠR , ĠB > ĠApp < Either K < L >, ĠR >. fold ( l : ĠFun < L , ĠB >, Ġr : ĠFun < R , ĠB >): ĠB Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġself Ġ= Ġthis . fix ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLeft Ġ-> Ġl ( self . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRight Ġ-> Ġr ( self . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġ< L , ĠR , ĠA > Ġfold ( l : ĠFun < L , ĠA >): ĠFun < Fun < R , ĠA >, ĠFun < App < Either K < L >, ĠR >, ĠA >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur ry Ġ{ Ġr , Ġe Ġ-> Ġe . fold ( l , Ġr ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġ< L , ĠR > Ġleft ( l : ĠL ): ĠEither < L , ĠR > Ġ= ĠLeft ( l ) ĊĠĠĠĠĠĠĠ Ġfun Ġ< L , ĠR > Ġright ( r : ĠR ): ĠEither < L , ĠR > Ġ= ĠRight ( r ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< L > Ġfunctor () Ġ= ĠFun ctor . functor < L >() ĊĠĠĠĠĠĠĠ Ġfun Ġ< L > Ġapplic ative () Ġ= ĠApplic ative . applic ative < L >() ĊĠĠĠĠĠĠĠ Ġfun Ġ< O > Ġselect ive () Ġ= ĠSelect ive . select ive < O >() ĊĠĠĠĠĠĠĠ Ġfun Ġ< L > Ġmon ad () Ġ= ĠMonad . mon ad < L >() ĊĠĠĠ Ġ} Ċ } Ċ