package Ġcom . ba eld ung . kotlin . arrow Ċ Ċ import Ġarrow . core . None Ċ import Ġarrow . core . Option Ċ import Ġarrow . core . Some Ċ import Ġkotlin . math . sqrt Ċ Ċ class ĠFunctional Error Handling With Option Ġ{ ĊĊĠĠĠ Ġfun Ġparse Input ( s : ĠString ): ĠOption < Int > Ġ= ĠOption . from Nullable ( s . toInt OrNull ()) ĊĊĠĠĠ Ġfun Ġis Even ( x : ĠInt ): ĠBoolean Ġ= Ġx Ġ% Ġ 2 Ġ== Ġ 0 ĊĊĠĠĠ Ġfun Ġbiggest Div isor ( x : ĠInt ): ĠInt Ġ= Ġbiggest Div isor ( x , Ġ 2 ) ĊĊĠĠĠ Ġfun Ġbiggest Div isor ( x : ĠInt , Ġy : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ== Ġy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ% Ġy Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġx Ġ/ Ġy ; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbiggest Div isor ( x , Ġy Ġ+ Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Square Number ( x : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsqrt : ĠDouble Ġ= Ġsqrt ( x . toDouble ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġsqrt Ġ% Ġ 1 . 0 Ġ== Ġ 0 . 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcompute With Option ( input : ĠString ): ĠOption < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Input ( input ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter (:: is Even ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map (:: big gest Div isor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map (:: is Square Number ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcompute With Option Client ( input : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcompute Option Ġ= Ġcompute With Option ( input ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( compute Option ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNone Ġ-> Ġ" Not Ġan Ġeven Ġnumber !" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSome Ġ-> Ġ" The Ġgreatest Ġdivisor Ġis Ġsquare Ġnumber : Ġ${ compute Option . t }" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }