/** * `Filterable` represents data structures which can be _partitioned_/_filtered_. * * Adapted from https://github.com/LiamGoodacre/purescript-filterable/blob/master/src/Data/Filterable.purs * * @since 2.0.0 */ import { Compactable, Compactable1, Compactable2, Compactable2C, Compactable3, Compactable3C, Compactable4, CompactableComposition, CompactableComposition11, CompactableComposition12, CompactableComposition12C, CompactableComposition21, CompactableComposition22, CompactableComposition23 } from './Compactable.js'; import { Either } from './Either.js'; import { Functor, Functor1, Functor2, Functor2C, Functor3, Functor3C, Functor4, FunctorComposition, FunctorComposition11, FunctorComposition12, FunctorComposition12C, FunctorComposition21, FunctorComposition22, FunctorComposition23 } from './Functor.js'; import { HKT, Kind, Kind2, Kind3, Kind4, URIS, URIS2, URIS3, URIS4 } from './HKT.js'; import { Option } from './Option.js'; import { Predicate } from './Predicate.js'; import { Refinement } from './Refinement.js'; import { Separated } from './Separated.js'; /** * @since 2.0.0 */ export interface Filter { (fa: HKT, refinement: Refinement): HKT; (fa: HKT, predicate: Predicate): HKT; } /** * @since 2.0.0 */ export interface Partition { (fa: HKT, refinement: Refinement): Separated, HKT>; (fa: HKT, predicate: Predicate): Separated, HKT>; } /** * @category model * @since 2.0.0 */ export interface Filterable extends Functor, Compactable { /** * Partition a data structure based on an either predicate. */ readonly partitionMap: (fa: HKT, f: (a: A) => Either) => Separated, HKT>; /** * Partition a data structure based on a boolean predicate. */ readonly partition: Partition; /** * Map over a data structure and filter based on an option predicate. */ readonly filterMap: (fa: HKT, f: (a: A) => Option) => HKT; /** * Filter a data structure based on a boolean predicate. */ readonly filter: Filter; } /** * @since 2.0.0 */ export interface Filter1 { (fa: Kind, refinement: Refinement): Kind; (fa: Kind, predicate: Predicate): Kind; } /** * @since 2.0.0 */ export interface Partition1 { (fa: Kind, refinement: Refinement): Separated, Kind>; (fa: Kind, predicate: Predicate): Separated, Kind>; } /** * @category model * @since 2.0.0 */ export interface Filterable1 extends Functor1, Compactable1 { readonly partitionMap: (fa: Kind, f: (a: A) => Either) => Separated, Kind>; readonly partition: Partition1; readonly filterMap: (fa: Kind, f: (a: A) => Option) => Kind; readonly filter: Filter1; } /** * @since 2.0.0 */ export interface Filter2 { (fa: Kind2, refinement: Refinement): Kind2; (fa: Kind2, predicate: Predicate): Kind2; } /** * @since 2.0.0 */ export interface Partition2 { (fa: Kind2, refinement: Refinement): Separated, Kind2>; (fa: Kind2, predicate: Predicate): Separated, Kind2>; } /** * @category model * @since 2.0.0 */ export interface Filterable2 extends Functor2, Compactable2 { readonly partitionMap: (fa: Kind2, f: (a: A) => Either) => Separated, Kind2>; readonly partition: Partition2; readonly filterMap: (fa: Kind2, f: (a: A) => Option) => Kind2; readonly filter: Filter2; } /** * @since 2.0.0 */ export interface Filter2C { (fa: Kind2, refinement: Refinement): Kind2; (fa: Kind2, predicate: Predicate): Kind2; } /** * @since 2.0.0 */ export interface Partition2C { (fa: Kind2, refinement: Refinement): Separated, Kind2>; (fa: Kind2, predicate: Predicate): Separated, Kind2>; } /** * @category model * @since 2.0.0 */ export interface Filterable2C extends Functor2C, Compactable2C { readonly partitionMap: (fa: Kind2, f: (a: A) => Either) => Separated, Kind2>; readonly partition: Partition2C; readonly filterMap: (fa: Kind2, f: (a: A) => Option) => Kind2; readonly filter: Filter2C; } /** * @since 2.0.0 */ export interface Filter3 { (fa: Kind3, refinement: Refinement): Kind3; (fa: Kind3, predicate: Predicate): Kind3; } /** * @since 2.0.0 */ export interface Partition3 { (fa: Kind3, refinement: Refinement): Separated, Kind3>; (fa: Kind3, predicate: Predicate): Separated, Kind3>; } /** * @category model * @since 2.0.0 */ export interface Filterable3 extends Functor3, Compactable3 { readonly partitionMap: (fa: Kind3, f: (a: A) => Either) => Separated, Kind3>; readonly partition: Partition3; readonly filterMap: (fa: Kind3, f: (a: A) => Option) => Kind3; readonly filter: Filter3; } /** * @since 2.2.0 */ export interface Filter3C { (fa: Kind3, refinement: Refinement): Kind3; (fa: Kind3, predicate: Predicate): Kind3; } /** * @since 2.2.0 */ export interface Partition3C { (fa: Kind3, refinement: Refinement): Separated, Kind3>; (fa: Kind3, predicate: Predicate): Separated, Kind3>; } /** * @category model * @since 2.2.0 */ export interface Filterable3C extends Functor3C, Compactable3C { readonly partitionMap: (fa: Kind3, f: (a: A) => Either) => Separated, Kind3>; readonly partition: Partition3C; readonly filterMap: (fa: Kind3, f: (a: A) => Option) => Kind3; readonly filter: Filter3C; } /** * @since 2.0.0 */ export interface Filter4 { (fa: Kind4, refinement: Refinement): Kind4; (fa: Kind4, predicate: Predicate): Kind4; } /** * @since 2.0.0 */ export interface Partition4 { (fa: Kind4, refinement: Refinement): Separated, Kind4>; (fa: Kind4, predicate: Predicate): Separated, Kind4>; } /** * @category model * @since 2.0.0 */ export interface Filterable4 extends Functor4, Compactable4 { readonly partitionMap: (fa: Kind4, f: (a: A) => Either) => Separated, Kind4>; readonly partition: Partition4; readonly filterMap: (fa: Kind4, f: (a: A) => Option) => Kind4; readonly filter: Filter4; } /** * `filter` composition. * * @since 2.10.0 */ export declare function filter(F: Functor2, G: Filterable2C): { (refinement: Refinement): (fga: Kind2>) => Kind2>; (predicate: Predicate): (fgb: Kind2>) => Kind2>; (predicate: Predicate): (fga: Kind2>) => Kind2>; }; export declare function filter(F: Functor1, G: Filterable2C): { (refinement: Refinement): (fga: Kind>) => Kind>; (predicate: Predicate): (fgb: Kind>) => Kind>; (predicate: Predicate): (fga: Kind>) => Kind>; }; export declare function filter(F: Functor1, G: Filterable1): { (refinement: Refinement): (fga: Kind>) => Kind>; (predicate: Predicate): (fgb: Kind>) => Kind>; (predicate: Predicate): (fga: Kind>) => Kind>; }; export declare function filter(F: Functor, G: Filterable): { (refinement: Refinement): (fga: HKT>) => HKT>; (predicate: Predicate): (fgb: HKT>) => HKT>; (predicate: Predicate): (fga: HKT>) => HKT>; }; /** * `filterMap` composition. * * @since 2.10.0 */ export declare function filterMap(F: Functor2, G: Filterable2C): (f: (a: A) => Option) => (fga: Kind2>) => Kind2>; export declare function filterMap(F: Functor1, G: Filterable2C): (f: (a: A) => Option) => (fga: Kind>) => Kind>; export declare function filterMap(F: Functor1, G: Filterable1): (f: (a: A) => Option) => (fga: Kind>) => Kind>; export declare function filterMap(F: Functor, G: Filterable): (f: (a: A) => Option) => (fga: HKT>) => HKT>; /** * `partition` composition. * * @since 2.10.0 */ export declare function partition(F: Functor2, G: Filterable2C): { (refinement: Refinement): (fga: Kind2>) => Separated>, Kind2>>; (predicate: Predicate): (fgb: Kind2>) => Separated>, Kind2>>; (predicate: Predicate): (fga: Kind2>) => Separated>, Kind2>>; }; export declare function partition(F: Functor1, G: Filterable2C): { (refinement: Refinement): (fga: Kind>) => Separated>, Kind>>; (predicate: Predicate): (fgb: Kind>) => Separated>, Kind>>; (predicate: Predicate): (fga: Kind>) => Separated>, Kind>>; }; export declare function partition(F: Functor1, G: Filterable1): { (refinement: Refinement): (fga: Kind>) => Separated>, Kind>>; (predicate: Predicate): (fgb: Kind>) => Separated>, Kind>>; (predicate: Predicate): (fga: Kind>) => Separated>, Kind>>; }; export declare function partition(F: Functor, G: Filterable): { (refinement: Refinement): (fga: HKT>) => Separated>, HKT>>; (predicate: Predicate): (fgb: HKT>) => Separated>, HKT>>; (predicate: Predicate): (fga: HKT>) => Separated>, HKT>>; }; /** * `partitionMap` composition. * * @since 2.10.0 */ export declare function partitionMap(F: Functor2, G: Filterable2C): (f: (a: A) => Either) => (fa: Kind2>) => Separated>, Kind2>>; export declare function partitionMap(F: Functor1, G: Filterable2C): (f: (a: A) => Either) => (fa: Kind>) => Separated>, Kind>>; export declare function partitionMap(F: Functor1, G: Filterable1): (f: (a: A) => Either) => (fa: Kind>) => Separated>, Kind>>; export declare function partitionMap(F: Functor, G: Filterable): (f: (a: A) => Either) => (fa: HKT>) => Separated>, HKT>>; /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface FilterableComposition extends FunctorComposition, CompactableComposition { readonly partitionMap: (fa: HKT>, f: (a: A) => Either) => Separated>, HKT>>; readonly partition: (fa: HKT>, predicate: Predicate) => Separated>, HKT>>; readonly filterMap: (fa: HKT>, f: (a: A) => Option) => HKT>; readonly filter: (fa: HKT>, predicate: Predicate) => HKT>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface FilterableComposition11 extends FunctorComposition11, CompactableComposition11 { readonly partitionMap: (fa: Kind>, f: (a: A) => Either) => Separated>, Kind>>; readonly partition: (fa: Kind>, predicate: Predicate) => Separated>, Kind>>; readonly filterMap: (fa: Kind>, f: (a: A) => Option) => Kind>; readonly filter: (fa: Kind>, predicate: Predicate) => Kind>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface FilterableComposition12 extends FunctorComposition12, CompactableComposition12 { readonly partitionMap: (fa: Kind>, f: (a: A) => Either) => Separated>, Kind>>; readonly partition: (fa: Kind>, predicate: Predicate) => Separated>, Kind>>; readonly filterMap: (fa: Kind>, f: (a: A) => Option) => Kind>; readonly filter: (fa: Kind>, predicate: Predicate) => Kind>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface FilterableComposition12C extends FunctorComposition12C, CompactableComposition12C { readonly partitionMap: (fa: Kind>, f: (a: A) => Either) => Separated>, Kind>>; readonly partition: (fa: Kind>, predicate: Predicate) => Separated>, Kind>>; readonly filterMap: (fa: Kind>, f: (a: A) => Option) => Kind>; readonly filter: (fa: Kind>, predicate: Predicate) => Kind>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface FilterableComposition21 extends FunctorComposition21, CompactableComposition21 { readonly partitionMap: (fa: Kind2>, f: (a: A) => Either) => Separated>, Kind2>>; readonly partition: (fa: Kind2>, predicate: Predicate) => Separated>, Kind2>>; readonly filterMap: (fa: Kind2>, f: (a: A) => Option) => Kind2>; readonly filter: (fa: Kind2>, predicate: Predicate) => Kind2>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface FilterableComposition2C1 extends FunctorComposition21, CompactableComposition21 { readonly partitionMap: (fa: Kind2>, f: (a: A) => Either) => Separated>, Kind2>>; readonly partition: (fa: Kind2>, predicate: Predicate) => Separated>, Kind2>>; readonly filterMap: (fa: Kind2>, f: (a: A) => Option) => Kind2>; readonly filter: (fa: Kind2>, predicate: Predicate) => Kind2>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface FilterableComposition22 extends FunctorComposition22, CompactableComposition22 { readonly partitionMap: (fa: Kind2>, f: (a: A) => Either) => Separated>, Kind2>>; readonly partition: (fa: Kind2>, predicate: Predicate) => Separated>, Kind2>>; readonly filterMap: (fa: Kind2>, f: (a: A) => Option) => Kind2>; readonly filter: (fa: Kind2>, predicate: Predicate) => Kind2>; } /** * @category zone of death * @since 2.0.0 * @deprecated */ export interface FilterableComposition22C extends FunctorComposition22, CompactableComposition22 { readonly partitionMap: (fa: Kind2>, f: (a: A) => Either) => Separated>, Kind2>>; readonly partition: (fa: Kind2>, predicate: Predicate) => Separated>, Kind2>>; readonly filterMap: (fa: Kind2>, f: (a: A) => Option) => Kind2>; readonly filter: (fa: Kind2>, predicate: Predicate) => Kind2>; } /** * @category zone of death * @since 2.2.0 * @deprecated */ export interface FilterableComposition23C extends FunctorComposition23, CompactableComposition23 { readonly partitionMap: (fa: Kind2>, f: (a: A) => Either) => Separated>, Kind2>>; readonly partition: (fa: Kind2>, predicate: Predicate) => Separated>, Kind2>>; readonly filterMap: (fa: Kind2>, f: (a: A) => Option) => Kind2>; readonly filter: (fa: Kind2>, predicate: Predicate) => Kind2>; } /** * Use * * - [`filter`](#filter) * - [`filterMap`](#filtermap) * - [`partition`](#partition) * - [`partitionMap`](#partitionmap) * * instead. * * @category zone of death * @since 2.0.0 * @deprecated */ export declare function getFilterableComposition(F: Functor2, G: Filterable3C): FilterableComposition23C; /** @deprecated */ export declare function getFilterableComposition(F: Functor2, G: Filterable2C): FilterableComposition22C; /** @deprecated */ export declare function getFilterableComposition(F: Functor2, G: Filterable2): FilterableComposition22; /** @deprecated */ export declare function getFilterableComposition(F: Functor2C, G: Filterable1): FilterableComposition2C1; /** @deprecated */ export declare function getFilterableComposition(F: Functor2, G: Filterable1): FilterableComposition21; /** @deprecated */ export declare function getFilterableComposition(F: Functor1, G: Filterable2C): FilterableComposition12C; /** @deprecated */ export declare function getFilterableComposition(F: Functor1, G: Filterable2): FilterableComposition12; /** @deprecated */ export declare function getFilterableComposition(F: Functor1, G: Filterable1): FilterableComposition11; /** @deprecated */ export declare function getFilterableComposition(F: Functor, G: Filterable): FilterableComposition;