package Ġcom . virt link . te go . runtime Ċ Ċ import Ġcom . virt link . te go . str ategies . Strategy Ċ import Ġcom . virt link . te go . str ategies . Strategy 1 Ċ Ċ /** Ċ Ġ* ĠAt tempts Ġto Ġevaluate Ġa Ġstrategy . Ċ Ġ* Ċ Ġ* Ġ@ param ĠC TX Ġthe Ġtype Ġof Ġcontext Ġ( in variant ) Ċ Ġ* Ġ@ param ĠT Ġthe Ġtype Ġof Ġinput Ġand Ġresults Ġ( in variant ) Ċ Ġ*/ Ċ @ Suppress (" PARAMETER _ NAME _ CHANGED _ ON _ OVERRIDE ") Ċ class ĠTry Strategy < CTX , ĠT > Ġprivate Ġconstructor () Ġ: ĠStrategy 1 < CTX , ĠStrategy < CTX , ĠT , ĠT >, ĠT , ĠT > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġinstance : ĠTry Strategy < *, Ġ*> Ġ= ĠTry Strategy < Any , ĠAny >() ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġ< CTX , ĠT > ĠgetInstance (): ĠTry Strategy < CTX , ĠT > Ġ= Ġinstance Ġas ĠTry Strategy < CTX , ĠT > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġname : ĠString Ġget () Ġ= Ġ" try " ĊĊĠĠĠ Ġoverride Ġfun Ġeval ( ĊĠĠĠĠĠĠĠ Ġctx : ĠC TX , ĊĠĠĠĠĠĠĠ Ġs : ĠStrategy < CTX , ĠT , ĠT >, ĊĠĠĠĠĠĠĠ Ġinput : ĠT ĊĠĠĠ Ġ): ĠSequence < T > Ġ= Ġsequence Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġif ( s , Ġid , Ġid ) ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠWe Ġcan Ġoptimize Ġthis Ġby Ġmoving Ġthe ĠgetInstance Ġcalls Ġoutside Ġthe Ġsequence Ġbody ĊĠĠĠĠĠĠĠ Ġval Ġgl c Ġ= ĠIf Strategy . getInstance < CTX , ĠT , ĠT , ĠT >() ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠId Strategy . getInstance < CTX , ĠT >() ĊĠĠĠĠĠĠĠ Ġyield All ( gl c . eval ( ctx , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs , Ġid , Ġid , Ġinput ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ"$ name (.. )" Ċ }