/** * @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)]