/**
* The `NonEmptyIterable` module provides a type-level representation of any
* JavaScript `Iterable` that is known to contain at least one element. A
* `NonEmptyIterable` can be consumed anywhere an `Iterable` is expected,
* while also carrying the guarantee that reading the first element is safe.
*
* @stability stable
* @since 2.0.0
*/
/**
* Defines the type-level symbol used to brand the `NonEmptyIterable` type.
*
* **When to use**
*
* Use as the property key for the type-level brand that marks an `Iterable` as
* non-empty.
*
* **Details**
*
* `NonEmptyIterable` includes `readonly [nonEmpty]: A`, which makes it
* distinct from a plain `Iterable` at compile time while preserving the
* normal iteration shape.
*
* @see {@link NonEmptyIterable} for the branded iterable type that uses this symbol
*
* @stability stable
* @category symbols
* @since 2.0.0
*/
export declare const nonEmpty: unique symbol;
/**
* Represents an iterable that is guaranteed to contain at least one element.
*
* **When to use**
*
* Use to require an iterable input that must provide at least one element.
*
* **Details**
*
* `NonEmptyIterable` extends the standard `Iterable` interface with a type-level
* guarantee of non-emptiness. This allows for safe operations that would otherwise
* require runtime checks or could throw exceptions.
*
* The type is branded with a unique symbol to ensure type safety while maintaining
* full compatibility with JavaScript's iteration protocol.
*
* @stability stable
* @category models
* @since 2.0.0
*/
export interface NonEmptyIterable extends Iterable {
readonly [nonEmpty]: A;
}
/**
* Extracts the first element and remaining elements from a non-empty iterable safely.
*
* **When to use**
*
* Use to split a non-empty iterable into its first element and an iterator for
* the remaining elements.
*
* **Details**
*
* This function provides a safe way to deconstruct a `NonEmptyIterable` into its
* head (first element) and tail (remaining elements as an iterator). Since the
* iterable is guaranteed to be non-empty, the first element is always available.
*
* **Example** (Extracting first and remaining elements)
*
* ```ts import.meta.vitest
* import { Chunk, NonEmptyIterable } from "effect"
*
* const [first, rest] = NonEmptyIterable.unprepend(Chunk.make(1, 2, 3))
*
* first // => 1
* globalThis.Array.from({ [Symbol.iterator]: () => rest }) // => [2, 3]
* ```
*
* @stability stable
* @category getters
* @since 2.0.0
*/
export declare const unprepend: (self: NonEmptyIterable) => [firstElement: A, remainingElements: Iterator];
//# sourceMappingURL=NonEmptyIterable.d.ts.map