// ets_tracing: off
import type * as O from "@effect-ts/system/Option"
import * as Tp from "../../Collections/Immutable/Tuple/index.js"
import type { Predicate, Refinement } from "../../Function/index.js"
import { filter } from "./filter.js"
/**
* Partition
*
* @ets_data_first partition_
*/
export function partition(
refinement: Refinement
): (fa: O.Option) => Tp.Tuple<[O.Option, O.Option]>
/**
* Partition
*
* @ets_data_first partition_
*/
export function partition(
predicate: Predicate
): (fa: O.Option) => Tp.Tuple<[O.Option, O.Option]>
/**
* Partition
*
* @ets_data_first partition_
*/
export function partition(
predicate: Predicate
): (fa: O.Option) => Tp.Tuple<[O.Option, O.Option]> {
return (fa) => partition_(fa, predicate)
}
/**
* Partition
*/
export function partition_(
fa: O.Option,
refinement: Refinement
): Tp.Tuple<[O.Option, O.Option]>
/**
* Partition
*/
export function partition_(
fa: O.Option,
predicate: Predicate
): Tp.Tuple<[O.Option, O.Option]>
/**
* Partition
*/
export function partition_(
fa: O.Option,
predicate: Predicate
): Tp.Tuple<[O.Option, O.Option]> {
return Tp.tuple(filter((a: A) => !predicate(a))(fa), filter(predicate)(fa))
}