@ file : Suppress (" UN CHECK ED _ CAST ") Ċ Ċ package Ġk fx Ċ Ċ interface ĠReader < In , ĠT > Ġ: ĠMonad < Reader < In , Ġ* >, ĠT >, ĠFun ctor < Reader < *, Ġ* >, ĠT >, ĠApplic ative < Reader < In , Ġ* >, ĠT > Ġ{ ĊĊĠĠĠ Ġval Ġrun : Ġ( In ) Ġ-> ĠT ĊĊĠĠĠ Ġoperator Ġfun Ġinvoke ( arg : ĠIn ): ĠT Ġ= Ġrun ( arg ) ĊĊĠĠĠ Ġoverride Ġfun Ġ< R > Ġflat Map ( bind : Ġ( T ) Ġ-> ĠMonad < Reader < In , Ġ* >, ĠR >): ĠReader < In , ĠR > Ġ= ĠReader Ġ{ Ġarg : ĠIn Ġ-> ĊĠĠĠĠĠĠĠ Ġ( bind ( run ( arg )) Ġas ĠReader < In , ĠR >). run ( arg ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< R > Ġmap ( transform : Ġ( T ) Ġ-> ĠR ): ĠReader < In , ĠR > Ġ= ĠReader Ġ{ Ġarg : ĠIn Ġ-> ĊĠĠĠĠĠĠĠ Ġrun ( arg ). let ( transform ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< R > Ġapply ( func : ĠApplic ative < Reader < In , Ġ* >, Ġ( T ) Ġ-> ĠR >): ĠReader < In , ĠR > Ġ= ĠReader Ġ{ Ġarg : ĠIn Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrun ( arg ) ĊĠĠĠĠĠĠĠ Ġval Ġfunction Ġ= Ġ( func Ġas ĠReader < In , Ġ( T ) Ġ-> ĠR > )( arg ) ĊĠĠĠĠĠĠĠ Ġfunction ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġ< I , ĠT > Ġinvoke ( func : Ġ( I ) Ġ-> ĠT ): ĠReader < I , ĠT > Ġ= Ġobject Ġ: ĠReader < I , ĠT > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġrun : Ġ( I ) Ġ-> ĠT Ġ= Ġfunc ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun Ġ< I > Ġask For () Ġ= ĠReader < I , ĠI > Ġ{ Ġit Ġ} Ċ