package Ġorg . http 4 k . lens Ċ Ċ interface ĠLens Injector < in ĠIN , Ġin ĠOUT > Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLens Ġoperation Ġto Ġset Ġthe Ġvalue Ġinto Ġthe Ġtarget ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġ< R Ġ: ĠOUT > Ġinvoke ( value : ĠIN , Ġtarget : ĠR ): ĠR ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLens Ġoperation Ġto Ġset Ġthe Ġvalue Ġinto Ġthe Ġtarget . ĠSyn om ym Ġfor Ġinvoke ( IN , ĠOUT ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< R Ġ: ĠOUT > Ġinject ( value : ĠIN , Ġtarget : ĠR ): ĠR Ġ= Ġinvoke ( value , Ġtarget ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLens Ġoperation Ġto Ġset Ġthe Ġvalue Ġinto Ġthe Ġtarget . ĠSyn om ym Ġfor Ġinvoke ( IN , ĠOUT ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġ< R Ġ: ĠOUT > Ġset ( target : ĠR , Ġvalue : ĠIN ) Ġ= Ġinject ( value , Ġtarget ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBind Ġthis ĠLens Ġto Ġa Ġvalue , Ġso Ġwe Ġcan Ġset Ġit Ġinto Ġa Ġtarget ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġin fix Ġfun Ġ< R Ġ: ĠOUT > Ġof ( value : ĠIN ): Ġ( R ) Ġ-> ĠR Ġ= Ġ{ Ġinvoke ( value , Ġit ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe strict Ġthe Ġtype Ġthat Ġthis ĠLens Ġcan Ġinject Ġinto ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< NEXT Ġ: ĠOUT > Ġrestrict Into (): ĠLens Injector < IN , ĠNEXT > Ġ= Ġthis Ċ } Ċ Ċ interface ĠLens Extractor < in ĠIN , Ġout ĠOUT > Ġ: Ġ( IN ) Ġ-> ĠOUT Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLens Ġoperation Ġto Ġget Ġthe Ġvalue Ġfrom Ġthe Ġtarget ĊĠĠĠĠ Ġ* Ġ@ throws ĠLens Failure Ġif Ġthe Ġvalue Ġcould Ġnot Ġbe Ġretrieved Ġfrom Ġthe Ġtarget Ġ( missing / invalid Ġetc ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Lens Failure :: class ) ĊĠĠĠ Ġoverride Ġoperator Ġfun Ġinvoke ( target : ĠIN ): ĠOUT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLens Ġoperation Ġto Ġget Ġthe Ġvalue Ġfrom Ġthe Ġtarget . ĠSyn onym Ġfor Ġinvoke ( IN ) ĊĠĠĠĠ Ġ* Ġ@ throws ĠLens Failure Ġif Ġthe Ġvalue Ġcould Ġnot Ġbe Ġretrieved Ġfrom Ġthe Ġtarget Ġ( missing / invalid Ġetc ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Lens Failure :: class ) ĊĠĠĠ Ġfun Ġextract ( target : ĠIN ): ĠOUT Ġ= Ġinvoke ( target ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLens Ġoperation Ġto Ġget Ġthe Ġvalue Ġfrom Ġthe Ġtarget . ĠSyn onym Ġfor Ġinvoke ( IN ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġ< R Ġ: ĠIN > Ġget ( target : ĠR ) Ġ= Ġextract ( target ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe strict Ġthe Ġtype Ġthat Ġthis ĠLens Ġcan Ġextract Ġfrom ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< NEXT Ġ: ĠIN > Ġrestrict From (): ĠLens Extractor < NEXT , ĠOUT > Ġ= Ġthis Ċ } Ċ Ċ interface ĠLens Injector Extractor < IN , ĠOUT > Ġ: ĠLens Extractor < IN , ĠOUT >, ĠLens Injector < OUT , ĠIN > Ċ