@@ -183,36 +183,38 @@ export class IterableResult<T> {
183183 return this . flatMap ( ( value ) => IterableResult . single ( mapper ( value ) ) ) ;
184184 }
185185 flatMap < U > ( mapper : ( value : T ) => IterableResult < U > ) : IterableResult < U > {
186- const iterable = this . iterable ;
187- return new IterableResult ( function * ( ) {
188- const errors : Array < ResultError > = [ ] ;
189- let yielded = false ;
190- for ( const result of iterable ( ) ) {
191- switch ( result . type ) {
192- case "value" : {
193- const more = IterableResult . from ( ( ) => mapper ( result . value ) ) ;
194- for ( const result of more . iterable ( ) ) {
195- switch ( result . type ) {
196- case "value" :
197- yielded = false ;
198- yield result ;
199- break ;
200- case "error" :
201- errors . push ( result . error ) ;
186+ return new IterableResult (
187+ function * ( this : IterableResult < T > ) : Generator < Result < U > > {
188+ const errors : Array < ResultError > = [ ] ;
189+ let yielded = false ;
190+ for ( const result of this . iterable ( ) ) {
191+ switch ( result . type ) {
192+ case "value" : {
193+ const more = IterableResult . from ( ( ) => mapper ( result . value ) ) ;
194+ for ( const result of more . iterable ( ) ) {
195+ switch ( result . type ) {
196+ case "value" :
197+ yielded = false ;
198+ yield result ;
199+ break ;
200+ case "error" :
201+ errors . push ( result . error ) ;
202+ }
202203 }
204+ break ;
203205 }
204- break ;
206+ case "error" :
207+ yield result ;
205208 }
206- case "error" :
207- yield result ;
208209 }
209- }
210- if ( ! yielded ) {
211- for ( const error of errors ) {
212- yield { type : "error" , error } ;
210+ if ( ! yielded ) {
211+ for ( const error of errors ) {
212+ yield { type : "error" , error } ;
213+ }
213214 }
214215 }
215- } ) ;
216+ . bind ( this ) ,
217+ ) ;
216218 }
217219 filterMap < U > ( mapper : ( value : T ) => U ) : IterableResult < NonNullable < U > > {
218220 return this . flatMap ( ( value ) => {
@@ -225,17 +227,19 @@ export class IterableResult<T> {
225227 } ) ;
226228 }
227229 addErrorWhenNone ( error : ( ) => ResultError ) : IterableResult < T > {
228- const iterable = this . iterable ;
229- return new IterableResult ( function * ( ) {
230- let yielded = false ;
231- for ( const result of iterable ( ) ) {
232- yielded = true ;
233- yield result ;
234- }
235- if ( ! yielded ) {
236- yield { type : "error" , error : error ( ) } ;
230+ return new IterableResult (
231+ function * ( this : IterableResult < T > ) : Generator < Result < T > > {
232+ let yielded = false ;
233+ for ( const result of this . iterable ( ) ) {
234+ yielded = true ;
235+ yield result ;
236+ }
237+ if ( ! yielded ) {
238+ yield { type : "error" , error : error ( ) } ;
239+ }
237240 }
238- } ) ;
241+ . bind ( this ) ,
242+ ) ;
239243 }
240244 static concat < T > (
241245 ...iterableResults : ReadonlyArray < IterableResult < T > >
@@ -282,7 +286,7 @@ export class IterableResult<T> {
282286 for ( const rightResult of right . iterable ( ) ) {
283287 switch ( rightResult . type ) {
284288 case "value" : {
285- const right = rightResult . value ;
289+ const { value : right } = rightResult ;
286290 rightAggregate . push ( right ) ;
287291 yielded = true ;
288292 yield {
0 commit comments