const streamMaker = (f) => { const aux = x => [f(x), () => aux(x + 1)] return () => aux(0) } const ones2 = streamMaker(x => x + 100) const numberUntil = (s, predict) => { const aux = (s, ans) => { const [result, th] = s() if (predict(result)) { return ans } return aux(th, ans + 1) } return aux(s, 1) } console.log(numberUntil(ones2, x => x === 200))