/** * Determines whether any element of the `Collection` satisfies the effectual * predicate `f`, working sequentially. * * @tsplus static effect/core/io/Effect.Ops exists */ export function exists( as: Collection, f: (a: A) => Effect ): Effect { return Effect.suspendSucceed(loop(as[Symbol.iterator](), f)) } function loop( iterator: Iterator, f: (a: A) => Effect ): Effect { const next = iterator.next() if (next.done) { return Effect.succeed(false) } return f(next.value).flatMap((b) => b ? Effect.succeed(b) : Effect.suspendSucceed(loop(iterator, f)) ) }