30 lines
789 B
JavaScript
30 lines
789 B
JavaScript
![]() |
/* @flow */
|
||
|
|
||
|
function makeIterator(coin_flip: () => boolean ): Iterator<string> {
|
||
|
return {
|
||
|
"@@iterator"() { return makeIterator(coin_flip); },
|
||
|
next(): IteratorResult<string, void> {
|
||
|
var done = coin_flip();
|
||
|
if (!done) {
|
||
|
return { done, value: "still going..." };
|
||
|
} else {
|
||
|
return { done };
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function makeIterator(coin_flip: () => boolean ): Iterator<string> {
|
||
|
return {
|
||
|
"@@iterator"() { return makeIterator(coin_flip); },
|
||
|
next(): IteratorResult<string, void> {
|
||
|
var done = coin_flip();
|
||
|
if (done) { // Whoops, made a mistake and forgot to negate done
|
||
|
return { done, value: "still going..." }; // Error string ~> void
|
||
|
} else {
|
||
|
return { done }; // Error void ~> string
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|