import type * as P from "@principia/prelude"; import * as HKT from "@principia/prelude/HKT"; import { append_ } from "./combinators"; import { Functor } from "./functor"; import type { URI, V } from "./model"; /* * ------------------------------------------- * Alt Array * ------------------------------------------- */ /** * ```haskell * alt_ :: Alt f => (f a, (() -> f a)) -> f a * ``` * * Combines two `Array`s * * @category Alt * @since 1.0.0 */ export const alt_ = (fa: ReadonlyArray, that: () => ReadonlyArray): ReadonlyArray => append_(fa, that()); /** * ```haskell * alt :: Alt f => (() -> f a) -> f a -> f a * ``` * * Combines two `Array`s * * @category Alt * @since 1.0.0 */ export const alt = (that: () => ReadonlyArray) => (fa: ReadonlyArray): ReadonlyArray => alt_(fa, that); export const Alt: P.Alt<[URI], V> = HKT.instance({ ...Functor, alt_, alt });