package Ġfp . kotlin . example . chapter 0 7 Ċ Ċ import Ġfp . kotlin . example . chapter 0 4 . compose Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġprintln ( Just Counter ( 1 0 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. f map Ġ{ Ġit Ġ+ Ġ 1 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. f map Ġ{ Ġit Ġ* Ġ 2 Ġ} ĊĠĠĠ Ġ) ĠĠ Ġ// ĠJust Counter ( 4 0 , Ġ 5 ) ĊĠĠĠ Ġprintln ( Nothing Counter . f map Ġ{ Ġit : ĠInt Ġ-> Ġit Ġ+ Ġ 1 0 Ġ}) Ġ Ġ// ĠNothing Counter ĊĊĠĠĠ Ġ// ĠFun ctor 's Ġr aws ĊĠĠĠ Ġprintln ( Nothing Counter . f map Ġ{ Ġidentity ( it ) Ġ} Ġ== Ġidentity ( Nothing Counter )) ĠĠ Ġ// Ġtrue ĊĠĠĠ Ġprintln ( Just Counter ( 5 , Ġ 0 ). f map Ġ{ Ġidentity ( it ) Ġ} Ġ== Ġidentity ( Just Counter ( 5 , Ġ 0 ))) Ġ// Ġfalse ĊĊĠĠĠ Ġval Ġf Ġ= Ġ{ Ġit : ĠInt Ġ-> Ġit Ġ+ Ġ 1 Ġ} ĊĠĠĠ Ġval Ġg Ġ= Ġ{ Ġit : ĠInt Ġ-> Ġit Ġ* Ġ 2 Ġ} ĊĊĠĠĠ Ġval Ġnothing Left Ġ= ĠNothing Counter . f map Ġ{ Ġf Ġcompose Ġg Ġ} ĊĠĠĠ Ġval Ġnothing Right Ġ= ĠNothing Counter . f map ( g ). f map ( f ) ĊĠĠĠ Ġprintln ( nothing Left Ġ== Ġnothing Right ) ĠĠĠ Ġ// Ġtrue ĊĊĠĠĠ Ġval Ġjust Left Ġ= ĠJust Counter ( 5 , Ġ 0 ). f map Ġ{ Ġf Ġcompose Ġg Ġ} ĊĠĠĠ Ġval Ġjust Right Ġ= ĠJust Counter ( 5 , Ġ 0 ). f map ( g ). f map ( f ) ĊĠĠĠ Ġprintln ( just Left Ġ== Ġjust Right ) Ġ Ġ// Ġfalse Ċ } Ċ Ċ sealed Ġclass ĠMaybe Counter < out ĠA > Ġ: ĠFun ctor < A > Ġ{ ĊĊĠĠĠ Ġabstract Ġoverride Ġfun ĠtoString (): ĠString ĊĊĠĠĠ Ġabstract Ġoverride Ġfun Ġ< B > Ġfmap ( f : Ġ( A ) Ġ-> ĠB ): ĠMaybe Counter < B > Ċ } Ċ Ċ data Ġclass ĠJust Counter < out ĠA >( val Ġvalue : ĠA , Ġval Ġcount : ĠInt ): ĠMaybe Counter < A >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" Just Counter ($ value , Ġ$ count )" ĊĊĠĠĠ Ġoverride Ġfun Ġ< B > Ġfmap ( f : Ġ( A ) Ġ-> ĠB ): ĠMaybe Counter < B > Ġ= ĠJust Counter ( f ( value ), Ġcount Ġ+ Ġ 1 ) Ċ } Ċ Ċ object ĠNothing Counter : ĠMaybe Counter < kotlin . Nothing >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" Nothing Counter " ĊĊĠĠĠ Ġoverride Ġfun Ġ< B > Ġfmap ( f : Ġ( kotlin . Nothing ) Ġ-> ĠB ): ĠMaybe Counter < B > Ġ= ĠNothing Counter Ċ }