package Ġcom . mit se st . functional Ċ Ċ inline Ġfun Ġ< re ified ĠA , Ġre ified ĠB , Ġre ified ĠC > Ġ(( A ) Ġ-> ĠB ). cur ry ( cross inline Ġg : Ġ( B ) Ġ-> ĠC ): Ġ( A ) Ġ-> ĠC Ġ{ ĊĠĠĠ Ġreturn Ġ{ Ġit Ġ-> Ġg . invoke ( this . invoke ( it )) Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠA , Ġre ified ĠB , Ġre ified ĠC > Ġ(( A ) Ġ-> ĠB ). cur ry ( cross inline Ġg : Ġsuspend Ġ( B ) Ġ-> ĠC ): Ġsuspend Ġ( A ) Ġ-> ĠC Ġ{ ĊĠĠĠ Ġreturn Ġ{ Ġit Ġ-> Ġg . invoke ( this . invoke ( it )) Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠA , Ġre ified ĠB , Ġre ified ĠC > Ġ( suspend Ġ( A ) Ġ-> ĠB ). cur ry ( cross inline Ġg : Ġsuspend Ġ( B ) Ġ-> ĠC ): Ġsuspend Ġ( A ) Ġ-> ĠC Ġ{ ĊĠĠĠ Ġreturn Ġ{ Ġit Ġ-> Ġg . invoke ( this . invoke ( it )) Ġ} Ċ } ĊĊĊ Ċ fun Ġ< T > Ġf ( g : Ġ() Ġ-> ĠT ) Ġ= Ġsuspend Ġ{ Ġg () Ġ} Ċ Ċ inline Ġfun Ġ< re ified ĠA , Ġre ified ĠB > ĠA . pipe ( cross inline Ġg : Ġ( A ) Ġ-> ĠB ): ĠB Ġ{ ĊĠĠĠ Ġreturn Ġg . invoke ( this ) Ċ } Ċ Ċ suspend Ġinline Ġfun Ġ< re ified ĠA , Ġre ified ĠB > ĠA . pipe ( cross inline Ġg : Ġsuspend Ġ( A ) Ġ-> ĠB ): ĠB Ġ{ ĊĠĠĠ Ġreturn Ġg . invoke ( this ) Ċ } ĊĊ Ċ inline Ġfun Ġ< re ified ĠA , Ġre ified ĠB , Ġre ified ĠC > Ġ(( A ) Ġ-> ĠB ). compose ( cross inline Ġg : Ġ( A ) Ġ-> ĠC ): Ġ( A ) Ġ-> ĠPair < B , ĠC > Ġ{ ĊĠĠĠ Ġreturn Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠ ĠPair ( this . invoke ( a ), Ġg . invoke ( a )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠA , Ġre ified ĠB , Ġre ified ĠC > Ġ(( A ) Ġ-> ĠB ). cur ry Compose ( cross inline Ġg : Ġ( B ) Ġ-> ĠC ): Ġ( A ) Ġ-> ĠPair < B , ĠC > Ġ{ ĊĠĠĠ Ġreturn Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġthis . invoke ( a ) ĊĠĠĠĠĠĠĠ ĠPair ( b , Ġg . invoke ( b )) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ inline Ġfun Ġ< re ified ĠA , Ġre ified ĠB , Ġre ified ĠC , Ġre ified ĠD > Ġ(( A ) Ġ-> ĠPair < B , ĠC >). compose Triple ( ĊĠĠĠ Ġcross inline Ġg : Ġ( A ) Ġ-> ĠD Ċ ): Ġ( A ) Ġ-> ĠTrip le < B , ĠC , ĠD > Ġ{ ĊĠĠĠ Ġreturn Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġpair Ġ= Ġthis . invoke ( a ) ĊĠĠĠĠĠĠĠ ĠTrip le ( pair . first , Ġpair . second , Ġg . invoke ( a )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠA , Ġre ified ĠB > Ġ(( A ) Ġ-> ĠB ). compose List ( cross inline Ġg : Ġ( A ) Ġ-> ĠB ): Ġ( A ) Ġ-> ĠMutable List < B > Ġ{ ĊĠĠĠ Ġreturn Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠ Ġmutable ListOf ( this . invoke ( a ), Ġg . invoke ( a )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠA , Ġre ified ĠB > Ġ(( A ) Ġ-> ĠMutable List < B >). append ToList ( cross inline Ġg : Ġ( A ) Ġ-> ĠB ): Ġ( A ) Ġ-> ĠMutable List < B > Ġ{ ĊĠĠĠ Ġreturn Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠ Ġthis . invoke ( a ). apply Ġ{ Ġadd ( g . invoke ( a )) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< A , ĠB > Ġ(( A ) Ġ-> ĠB ). run If ( condition : ĠBoolean ): Ġ( A ) Ġ-> ĠB ? Ġ= Ġif Ġ( condition ) Ġ{ ĊĠĠĠ Ġthis Ċ } Ġelse Ġ{ ĊĠĠĠ Ġ{ Ġnull Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠA , Ġre ified ĠB , Ġre ified ĠC > Ġ(( A ) Ġ-> ĠB ). if Cur ry ( ĊĠĠĠ Ġvar arg Ġconditions : ĠPair < (( B ) Ġ-> ĠBoolean ), Ġ( B ) Ġ-> ĠC >, ĊĠĠĠ Ġcross inline Ġ` else `: Ġ( B ) Ġ-> ĠC Ċ ): Ġ( A ) Ġ-> ĠC Ġ{ ĊĠĠĠ Ġreturn Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġthis . invoke ( a ) ĊĠĠĠĠĠĠĠ Ġvar Ġc : ĠC ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfor Ġ( pair Ġin Ġconditions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( condition , Ġfunc ) Ġ= Ġpair ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( condition . invoke ( b )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ= Ġfunc . invoke ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġc Ġ?: Ġ` else `. invoke ( b ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠA , Ġre ified ĠB , Ġre ified ĠC > Ġ( suspend Ġ( A ) Ġ-> ĠB ). ` if `( ĊĠĠĠ Ġvar arg Ġconditions : ĠPair < (( B ) Ġ-> ĠBoolean ), Ġsuspend Ġ( B ) Ġ-> ĠC > Ċ ): Ġsuspend Ġ( A ) Ġ-> ĠC ? Ġ{ ĊĠĠĠ Ġreturn Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġthis . invoke ( a ) ĊĠĠĠĠĠĠĠ Ġvar Ġc : ĠC ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfor Ġ( pair Ġin Ġconditions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( condition , Ġfunc ) Ġ= Ġpair ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( condition . invoke ( b )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ= Ġfunc . invoke ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġc ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠA , Ġre ified ĠB , Ġre ified ĠC > Ġ(( A ) Ġ-> ĠB ). ` if `( ĊĠĠĠ Ġvar arg Ġconditions : ĠPair < (( B ) Ġ-> ĠBoolean ), Ġsuspend Ġ( B ) Ġ-> ĠC >, ĊĠĠĠ Ġcross inline Ġ` else `: Ġsuspend Ġ( B ) Ġ-> ĠC Ċ ): Ġsuspend Ġ( A ) Ġ-> ĠC Ġ{ ĊĠĠĠ Ġreturn Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġthis . invoke ( a ) ĊĠĠĠĠĠĠĠ Ġvar Ġc : ĠC ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfor Ġ( pair Ġin Ġconditions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( condition , Ġfunc ) Ġ= Ġpair ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( condition . invoke ( b )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ= Ġfunc . invoke ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġc Ġ?: Ġ` else `. invoke ( b ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ inline Ġfun Ġ< re ified ĠA , Ġre ified ĠB > Ġ` if `( ĊĠĠĠ Ġvar arg Ġconditions : ĠPair < (( A ) Ġ-> ĠBoolean ), Ġ( A ) Ġ-> ĠB >, ĊĠĠĠ Ġcross inline Ġ` else `: Ġ( A ) Ġ-> ĠB Ċ ): Ġ( A ) Ġ-> ĠB Ġ{ ĊĠĠĠ Ġreturn Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠ Ġvar Ġb : ĠB ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfor Ġ( pair Ġin Ġconditions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( condition , Ġfunc ) Ġ= Ġpair ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( condition . invoke ( a )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġfunc . invoke ( a ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġb Ġ?: Ġ` else `. invoke ( a ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠA > ĠBoolean . to Callback (): Ġ( A ) Ġ-> ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġ{ Ġthis Ġ} Ċ } Ċ