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
});