/**
* @since 1.0.0
*/
import type { NonEmptyReadonlyArray } from "@effect/data/ReadonlyArray"
// -------------------------------------------------------------------------------------
// ReadonlyArray
// -------------------------------------------------------------------------------------
/** @internal */
export const empty: readonly [] = []
/** @internal */
export const fromIterable = (collection: Iterable): ReadonlyArray =>
Array.isArray(collection) ? collection : Array.from(collection)
// -------------------------------------------------------------------------------------
// NonEmptyReadonlyArray
// -------------------------------------------------------------------------------------
/** @internal */
export const isNonEmpty = (as: ReadonlyArray): as is NonEmptyReadonlyArray => as.length > 0
/** @internal */
export const head = (as: NonEmptyReadonlyArray): A => as[0]
/** @internal */
export const tail = (as: NonEmptyReadonlyArray): ReadonlyArray => as.slice(1)
// -------------------------------------------------------------------------------------
// Record
// -------------------------------------------------------------------------------------
/** @internal */
export const Do: Readonly<{}> = {}
/** @internal */
export const has = Object.prototype.hasOwnProperty
// -------------------------------------------------------------------------------------
// NonEmptyArray
// -------------------------------------------------------------------------------------
/**
* @internal
* @since 1.0.0
*/
export type NonEmptyArray = [A, ...Array]
/** @internal */
export const toNonEmptyArray = (a: A): NonEmptyArray => [a]
/** @internal */
export const fromNonEmptyReadonlyArray = (
as: NonEmptyReadonlyArray
): NonEmptyArray => [head(as), ...tail(as)]