/** * `Witherable` represents data structures which can be _partitioned_ with effects in some `Applicative` functor. * * Adapted from https://github.com/LiamGoodacre/purescript-filterable/blob/master/src/Data/Witherable.purs * * @since 2.0.0 */ import { Applicative, Applicative1, Applicative2, Applicative2C, Applicative3, Applicative3C } from './Applicative' import { Compactable, Compactable1, Compactable2, Compactable2C } from './Compactable' import { Either } from './Either' import { Filterable, Filterable1, Filterable2, Filterable2C, Filterable3 } from './Filterable' import { HKT, Kind, Kind2, Kind3, URIS, URIS2, URIS3 } from './HKT' import { Option } from './Option' import { Separated } from './Separated' import { Traversable, Traversable1, Traversable2, Traversable2C, Traversable3 } from './Traversable' /** * @category model * @since 2.0.0 */ export interface Witherable extends Traversable, Filterable { /** * Partition a structure with effects */ readonly wilt: Wilt /** * Filter a structure with effects */ readonly wither: Wither } /** * @category model * @since 2.0.0 */ export interface Witherable1 extends Traversable1, Filterable1 { readonly wilt: Wilt1 readonly wither: Wither1 } /** * @category model * @since 2.0.0 */ export interface Witherable2 extends Traversable2, Filterable2 { readonly wilt: Wilt2 readonly wither: Wither2 } /** * @category model * @since 2.0.0 */ export interface Witherable2C extends Traversable2C, Filterable2C { readonly wilt: Wilt2C readonly wither: Wither2C } /** * @category model * @since 2.0.0 */ export interface Witherable3 extends Traversable3, Filterable3 { readonly wilt: Wilt3 readonly wither: Wither3 } /** * @since 2.0.0 */ export interface Wither { (F: Applicative3): ( ta: HKT, f: (a: A) => Kind3> ) => Kind3> (F: Applicative3C): ( ta: HKT, f: (a: A) => Kind3> ) => Kind3> (F: Applicative2): ( ta: HKT, f: (a: A) => Kind2> ) => Kind2> (F: Applicative2C): ( ta: HKT, f: (a: A) => Kind2> ) => Kind2> (F: Applicative1): (ta: HKT, f: (a: A) => Kind>) => Kind> (F: Applicative): (ta: HKT, f: (a: A) => HKT>) => HKT> } /** * @since 2.0.0 */ export interface Wither1 { (F: Applicative3): ( ta: Kind, f: (a: A) => Kind3> ) => Kind3> (F: Applicative3C): ( ta: Kind, f: (a: A) => Kind3> ) => Kind3> (F: Applicative2): ( ta: Kind, f: (a: A) => Kind2> ) => Kind2> (F: Applicative2C): ( ta: Kind, f: (a: A) => Kind2> ) => Kind2> (F: Applicative1): (ta: Kind, f: (a: A) => Kind>) => Kind> (F: Applicative): (ta: Kind, f: (a: A) => HKT>) => HKT> } /** * @since 2.0.0 */ export interface Wither2 { (F: Applicative3): ( ta: Kind2, f: (a: A) => Kind3> ) => Kind3> (F: Applicative2): ( ta: Kind2, f: (a: A) => Kind2> ) => Kind2> (F: Applicative2C): ( ta: Kind2, f: (a: A) => Kind2> ) => Kind2> (F: Applicative1): ( ta: Kind2, f: (a: A) => Kind> ) => Kind> (F: Applicative): (ta: Kind2, f: (a: A) => HKT>) => HKT> } /** * @since 2.0.0 */ export interface Wither2C { (F: Applicative3): ( ta: Kind2, f: (a: A) => Kind3> ) => Kind3> (F: Applicative2): ( ta: Kind2, f: (a: A) => Kind2> ) => Kind2> (F: Applicative2C): ( ta: Kind2, f: (a: A) => Kind2> ) => Kind2> (F: Applicative1): ( ta: Kind2, f: (a: A) => Kind> ) => Kind> (F: Applicative): (ta: Kind2, f: (a: A) => HKT>) => HKT> } /** * @since 2.0.0 */ export interface Wither3 { (F: Applicative3): ( ta: Kind3, f: (a: A) => Kind3> ) => Kind3> (F: Applicative2): ( ta: Kind3, f: (a: A) => Kind2> ) => Kind2> (F: Applicative2C): ( ta: Kind3, f: (a: A) => Kind2> ) => Kind2> (F: Applicative1): ( ta: Kind3, f: (a: A) => Kind> ) => Kind> (F: Applicative): ( ta: Kind3, f: (a: A) => HKT> ) => HKT> } /** * @since 2.0.0 */ export interface Wilt { (F: Applicative3): ( wa: HKT, f: (a: A) => Kind3> ) => Kind3, HKT>> (F: Applicative3C): ( wa: HKT, f: (a: A) => Kind3> ) => Kind3, HKT>> (F: Applicative2): ( wa: HKT, f: (a: A) => Kind2> ) => Kind2, HKT>> (F: Applicative2C): ( wa: HKT, f: (a: A) => Kind2> ) => Kind2, HKT>> (F: Applicative1): ( wa: HKT, f: (a: A) => Kind> ) => Kind, HKT>> (F: Applicative): ( wa: HKT, f: (a: A) => HKT> ) => HKT, HKT>> } /** * @since 2.0.0 */ export interface Wilt1 { (F: Applicative3): ( wa: Kind, f: (a: A) => Kind3> ) => Kind3, Kind>> (F: Applicative3C): ( wa: Kind, f: (a: A) => Kind3> ) => Kind3, Kind>> (F: Applicative2): ( wa: Kind, f: (a: A) => Kind2> ) => Kind2, Kind>> (F: Applicative2C): ( wa: Kind, f: (a: A) => Kind2> ) => Kind2, Kind>> (F: Applicative1): ( wa: Kind, f: (a: A) => Kind> ) => Kind, Kind>> (F: Applicative): ( wa: Kind, f: (a: A) => HKT> ) => HKT, Kind>> } /** * @since 2.0.0 */ export interface Wilt2 { (F: Applicative3): ( wa: Kind2, f: (a: A) => Kind3> ) => Kind3, Kind2>> (F: Applicative2): ( wa: Kind2, f: (a: A) => Kind2> ) => Kind2, Kind2>> (F: Applicative2C): ( wa: Kind2, f: (a: A) => Kind2> ) => Kind2, Kind2>> (F: Applicative1): ( wa: Kind2, f: (a: A) => Kind> ) => Kind, Kind2>> (F: Applicative): ( wa: Kind2, f: (a: A) => HKT> ) => HKT, Kind2>> } /** * @since 2.0.0 */ export interface Wilt2C { (F: Applicative3): ( wa: Kind2, f: (a: A) => Kind3> ) => Kind3, Kind2>> (F: Applicative2): ( wa: Kind2, f: (a: A) => Kind2> ) => Kind2, Kind2>> (F: Applicative2C): ( wa: Kind2, f: (a: A) => Kind2> ) => Kind2, Kind2>> (F: Applicative1): ( wa: Kind2, f: (a: A) => Kind> ) => Kind, Kind2>> (F: Applicative): ( wa: Kind2, f: (a: A) => HKT> ) => HKT, Kind2>> } /** * @since 2.0.0 */ export interface Wilt3 { (F: Applicative3): ( wa: Kind3, f: (a: A) => Kind3> ) => Kind3, Kind3>> (F: Applicative2): ( wa: Kind3, f: (a: A) => Kind2> ) => Kind2, Kind3>> (F: Applicative2C): ( wa: Kind3, f: (a: A) => Kind2> ) => Kind2, Kind3>> (F: Applicative1): ( wa: Kind3, f: (a: A) => Kind> ) => Kind, Kind3>> (F: Applicative): ( wa: Kind3, f: (a: A) => HKT> ) => HKT, Kind3>> } /** * @since 2.6.5 */ export interface PipeableWither { (F: Applicative3): ( f: (a: A) => Kind3> ) => (ta: HKT) => Kind3> (F: Applicative3C): ( f: (a: A) => Kind3> ) => (ta: HKT) => Kind3> (F: Applicative2): ( f: (a: A) => Kind2> ) => (ta: HKT) => Kind2> (F: Applicative2C): ( f: (a: A) => Kind2> ) => (ta: HKT) => Kind2> (F: Applicative1): (f: (a: A) => Kind>) => (ta: HKT) => Kind> (F: Applicative): (f: (a: A) => HKT>) => (ta: HKT) => HKT> } /** * @since 2.6.5 */ export interface PipeableWither1 { (F: Applicative3): ( f: (a: A) => Kind3> ) => (ta: Kind) => Kind3> (F: Applicative3C): ( f: (a: A) => Kind3> ) => (ta: Kind) => Kind3> (F: Applicative2): ( f: (a: A) => Kind2> ) => (ta: Kind) => Kind2> (F: Applicative2C): ( f: (a: A) => Kind2> ) => (ta: Kind) => Kind2> (F: Applicative1): ( f: (a: A) => Kind> ) => (ta: Kind) => Kind> (F: Applicative): (f: (a: A) => HKT>) => (ta: Kind) => HKT> } /** * @since 2.6.5 */ export interface PipeableWither2 { (F: Applicative3): ( f: (a: A) => Kind3> ) => (ta: Kind2) => Kind3> (F: Applicative2): ( f: (a: A) => Kind2> ) => (ta: Kind2) => Kind2> (F: Applicative2C): ( f: (a: A) => Kind2> ) => (ta: Kind2) => Kind2> (F: Applicative1): ( f: (a: A) => Kind> ) => (ta: Kind2) => Kind> (F: Applicative): (f: (a: A) => HKT>) => (ta: Kind2) => HKT> } /** * @since 2.6.5 */ export interface PipeableWither2C { (F: Applicative3): ( f: (a: A) => Kind3> ) => (ta: Kind2) => Kind3> (F: Applicative2): ( f: (a: A) => Kind2> ) => (ta: Kind2) => Kind2> (F: Applicative2C): ( f: (a: A) => Kind2> ) => (ta: Kind2) => Kind2> (F: Applicative1): ( f: (a: A) => Kind> ) => (ta: Kind2) => Kind> (F: Applicative): (f: (a: A) => HKT>) => (ta: Kind2) => HKT> } /** * @since 2.6.5 */ export interface PipeableWither3 { (F: Applicative3): ( f: (a: A) => Kind3> ) => (ta: Kind3) => Kind3> (F: Applicative2): ( f: (a: A) => Kind2> ) => (ta: Kind3) => Kind2> (F: Applicative2C): ( f: (a: A) => Kind2> ) => (ta: Kind3) => Kind2> (F: Applicative1): ( f: (a: A) => Kind> ) => (ta: Kind3) => Kind> (F: Applicative): ( f: (a: A) => HKT> ) => (ta: Kind3) => HKT> } /** * @since 2.6.5 */ export interface PipeableWilt { (F: Applicative3): ( f: (a: A) => Kind3> ) => (wa: HKT) => Kind3, HKT>> (F: Applicative3C): ( f: (a: A) => Kind3> ) => (wa: HKT) => Kind3, HKT>> (F: Applicative2): ( f: (a: A) => Kind2> ) => (wa: HKT) => Kind2, HKT>> (F: Applicative2C): ( f: (a: A) => Kind2> ) => (wa: HKT) => Kind2, HKT>> (F: Applicative1): ( f: (a: A) => Kind> ) => (wa: HKT) => Kind, HKT>> (F: Applicative): ( f: (a: A) => HKT> ) => (wa: HKT) => HKT, HKT>> } /** * @since 2.6.5 */ export interface PipeableWilt1 { (F: Applicative3): ( f: (a: A) => Kind3> ) => (wa: Kind) => Kind3, Kind>> (F: Applicative3C): ( f: (a: A) => Kind3> ) => (wa: Kind) => Kind3, Kind>> (F: Applicative2): ( f: (a: A) => Kind2> ) => (wa: Kind) => Kind2, Kind>> (F: Applicative2C): ( f: (a: A) => Kind2> ) => (wa: Kind) => Kind2, Kind>> (F: Applicative1): ( f: (a: A) => Kind> ) => (wa: Kind) => Kind, Kind>> (F: Applicative): ( f: (a: A) => HKT> ) => (wa: Kind) => HKT, Kind>> } /** * @since 2.6.5 */ export interface PipeableWilt2 { (F: Applicative3): ( f: (a: A) => Kind3> ) => (wa: Kind2) => Kind3, Kind2>> (F: Applicative2): ( f: (a: A) => Kind2> ) => (wa: Kind2) => Kind2, Kind2>> (F: Applicative2C): ( f: (a: A) => Kind2> ) => (wa: Kind2) => Kind2, Kind2>> (F: Applicative1): ( f: (a: A) => Kind> ) => (wa: Kind2) => Kind, Kind2>> (F: Applicative): ( f: (a: A) => HKT> ) => (wa: Kind2) => HKT, Kind2>> } /** * @since 2.6.5 */ export interface PipeableWilt2C { (F: Applicative3): ( f: (a: A) => Kind3> ) => (wa: Kind2) => Kind3, Kind2>> (F: Applicative2): ( f: (a: A) => Kind2> ) => (wa: Kind2) => Kind2, Kind2>> (F: Applicative2C): ( f: (a: A) => Kind2> ) => (wa: Kind2) => Kind2, Kind2>> (F: Applicative1): ( f: (a: A) => Kind> ) => (wa: Kind2) => Kind, Kind2>> (F: Applicative): ( f: (a: A) => HKT> ) => (wa: Kind2) => HKT, Kind2>> } /** * @since 2.6.5 */ export interface PipeableWilt3 { (F: Applicative3): ( f: (a: A) => Kind3> ) => (wa: Kind3) => Kind3, Kind3>> (F: Applicative2): ( f: (a: A) => Kind2> ) => (wa: Kind3) => Kind2, Kind3>> (F: Applicative2C): ( f: (a: A) => Kind2> ) => (wa: Kind3) => Kind2, Kind3>> (F: Applicative1): ( f: (a: A) => Kind> ) => (wa: Kind3) => Kind, Kind3>> (F: Applicative): ( f: (a: A) => HKT> ) => (wa: Kind3) => HKT, Kind3>> } /** * Return a `wilt` implementation from `Traversable` and `Compactable`. * * @category defaults * @since 2.11.0 */ export declare function wiltDefault( T: Traversable2C, C: Compactable2 ): Witherable2C['wilt'] export declare function wiltDefault( T: Traversable2, C: Compactable2C ): Witherable2C['wilt'] export declare function wiltDefault(T: Traversable1, C: Compactable1): Witherable1['wilt'] export declare function wiltDefault(T: Traversable, C: Compactable): Witherable['wilt'] /** * Return a `wither` implementation from `Traversable` and `Compactable`. * * @category defaults * @since 2.11.0 */ export declare function witherDefault( T: Traversable2C, C: Compactable2 ): Witherable2C['wither'] export declare function witherDefault( T: Traversable2, C: Compactable2C ): Witherable2C['wither'] export declare function witherDefault(T: Traversable1, C: Compactable1): Witherable1['wither'] export declare function witherDefault(T: Traversable, C: Compactable): Witherable['wither'] /** * @since 2.11.0 */ export interface FilterE1 { (F: Applicative3): ( predicate: (a: A) => Kind3 ) => (ga: Kind) => Kind3> (F: Applicative3C): ( predicate: (a: A) => Kind3 ) => (ga: Kind) => Kind3> (F: Applicative2): ( predicate: (a: A) => Kind2 ) => (ga: Kind) => Kind2> (F: Applicative2C): ( predicate: (a: A) => Kind2 ) => (ga: Kind) => Kind2> (F: Applicative1): ( predicate: (a: A) => Kind ) => (ga: Kind) => Kind> (F: Applicative): (predicate: (a: A) => HKT) => (ga: Kind) => HKT> } /** * Filter values inside a `F` context. * * See `ReadonlyArray`'s `filterE` for an example of usage. * * @since 2.11.0 */ export declare function filterE(W: Witherable1): FilterE1 export declare function filterE( W: Witherable ): (F: Applicative) => (predicate: (a: A) => HKT) => (ga: HKT) => HKT>