/** * Determines whether all elements of the `Collection` satisfies the effectual * predicate `f`. * * @tsplus static effect/core/io/Effect.Ops forAll */ export function forAll( 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() return next.done ? Effect.succeed(true) : f(next.value).flatMap((b) => b ? Effect.suspendSucceed(loop(iterator, f)) : Effect.succeed(b)) }