package Ġfp . kotlin . example . chapter 0 8 Ċ Ċ import Ġfp . kotlin . example . chapter 0 7 . Functor Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġ// Ġfmap Ġtest ĊĠĠĠ Ġprintln ( Just ( 1 0 ). f map Ġ{ Ġit Ġ+ Ġ 1 0 Ġ}) ĠĠ Ġ// ĠJust ( 2 0 ) ĊĠĠĠ Ġprintln ( Nothing . f map Ġ{ Ġit : ĠInt Ġ-> Ġit Ġ+ Ġ 1 0 Ġ}) Ġ Ġ// ĠNothing ĊĊĠĠĠ Ġ// Ġpure Ġtest ĊĠĠĠ Ġprintln ( Maybe . pure ( 1 0 )) Ġ Ġ// ĠJust ( 1 0 ) ĊĠĠĠ Ġprintln ( Maybe . pure Ġ{ Ġx : ĠInt Ġ-> Ġx Ġ* Ġ 2 Ġ}) Ġ Ġ// ĠJust (( kotlin . Int ) Ġ-> Ġkotlin . Int ) ĊĊĠĠĠ Ġ// Ġapply Ġtest ĊĠĠĠ Ġprintln ( Maybe . pure Ġ{ Ġx : ĠInt Ġ-> Ġx Ġ* Ġ 2 Ġ} Ġapply ĠJust ( 1 0 )) Ġ Ġ// ĠJust ( 2 0 ) ĊĠĠĠ Ġprintln ( Maybe . pure Ġ{ Ġx : ĠInt Ġ-> Ġx Ġ* Ġ 2 Ġ} Ġapply ĠNothing ) ĠĠ Ġ// ĠNothing ĊĊĠĠĠ Ġ// Ġapplic ative Ġstyle Ġprogramming Ġtest Ċ // ĠĠĠ Ġprintln ( AM aybe . pure ({ Ġx : ĠInt , Ġy : ĠInt Ġ-> Ġx Ġ* Ġy }) Ġapply ĠJust ( 1 0 ) Ġapply ĠJust ( 2 0 )) Ġ Ġ// Ġcompile Ġerror ĊĊĠĠĠ Ġprintln ( Maybe . pure ({ Ġx : ĠInt , Ġy : ĠInt Ġ-> Ġx Ġ* Ġy Ġ}. cur ried ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply ĠJust ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply ĠJust ( 2 0 ) ĊĠĠĠ Ġ) ĠĠ Ġ// ĠJust ( 2 0 0 ) ĊĊĠĠĠ Ġprintln ( Maybe . pure ({ Ġx : ĠInt , Ġy : ĠInt , Ġz : ĠInt Ġ-> Ġx Ġ* Ġy Ġ+ Ġz Ġ}. cur ried ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply ĠJust ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply ĠJust ( 2 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply ĠJust ( 3 0 ) ĊĠĠĠ Ġ) ĠĠ Ġ// ĠJust ( 2 3 0 ) Ċ } Ċ Ċ sealed Ġclass ĠMaybe < out ĠA > Ġ: ĠFun ctor < A > Ġ{ ĊĊĠĠĠ Ġabstract Ġoverride Ġfun ĠtoString (): ĠString ĊĊĠĠĠ Ġabstract Ġoverride Ġfun Ġ< B > Ġfmap ( f : Ġ( A ) Ġ-> ĠB ): ĠMaybe < B > ĊĊĠĠĠ Ġcompanion Ġobject Ċ } Ċ Ċ data Ġclass ĠJust < out ĠA >( val Ġvalue : ĠA ) Ġ: ĠMaybe < A >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" Just ($ value )" ĊĊĠĠĠ Ġoverride Ġfun Ġ< B > Ġfmap ( f : Ġ( A ) Ġ-> ĠB ): ĠMaybe < B > Ġ= ĠJust ( f ( value )) Ċ } Ċ Ċ object ĠNothing Ġ: ĠMaybe < kotlin . Nothing >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" Nothing " ĊĊĠĠĠ Ġoverride Ġfun Ġ< B > Ġfmap ( f : Ġ( kotlin . Nothing ) Ġ-> ĠB ): ĠMaybe < B > Ġ= ĠNothing Ċ } Ċ Ċ fun Ġ< A > ĠMaybe . Companion . pure ( value : ĠA ) Ġ= ĠJust ( value ) Ċ Ċ infix Ġfun Ġ< A , ĠB > ĠMaybe <( A ) Ġ-> ĠB >. apply ( f : ĠMaybe < A >): ĠMaybe < B > Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠJust Ġ-> Ġf . f map ( value ) ĊĠĠĠ ĠNothing Ġ-> ĠNothing Ċ } Ċ Ċ private Ġfun Ġ< P 1 , ĠP 2 , ĠR > Ġ(( P 1 , ĠP 2 ) Ġ-> ĠR ). cur ried (): Ġ( P 1 ) Ġ-> Ġ( P 2 ) Ġ-> ĠR Ġ= ĊĠĠĠĠĠĠĠ Ġ{ Ġp 1 : ĠP 1 Ġ-> Ġ{ Ġp 2 : ĠP 2 Ġ-> Ġthis ( p 1 , Ġp 2 ) Ġ} Ġ} Ċ Ċ private Ġfun Ġ< P 1 , ĠP 2 , ĠP 3 , ĠR > Ġ(( P 1 , ĠP 2 , ĠP 3 ) Ġ-> ĠR ). cur ried (): Ġ( P 1 ) Ġ-> Ġ( P 2 ) Ġ-> Ġ( P 3 ) Ġ-> ĠR Ġ= ĊĠĠĠĠĠĠĠ Ġ{ Ġp 1 : ĠP 1 Ġ-> Ġ{ Ġp 2 : ĠP 2 Ġ-> Ġ{ Ġp 3 : ĠP 3 Ġ-> Ġthis ( p 1 , Ġp 2 , Ġp 3 ) Ġ} Ġ} Ġ} ĊĊ