/** * `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' import { Either } from './Either' import { Functor, Functor1, Functor2, Functor2C, Functor3, Functor3C, Functor4, FunctorComposition, FunctorComposition11, FunctorComposition12, FunctorComposition12C, FunctorComposition21, FunctorComposition22, FunctorComposition23 } from './Functor' import { HKT, Kind, Kind2, Kind3, Kind4, URIS, URIS2, URIS3, URIS4 } from './HKT' import { Option } from './Option' import { Predicate } from './Predicate' import { Refinement } from './Refinement' import { Separated } from './Separated' /** * @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, 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, 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, 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