/** * `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.js'; import { Compactable, Compactable1, Compactable2, Compactable2C } from './Compactable.js'; import { Either } from './Either.js'; import { Filterable, Filterable1, Filterable2, Filterable2C, Filterable3 } from './Filterable.js'; import { HKT, Kind, Kind2, Kind3, URIS, URIS2, URIS3 } from './HKT.js'; import { Option } from './Option.js'; import { Separated } from './Separated.js'; import { Traversable, Traversable1, Traversable2, Traversable2C, Traversable3 } from './Traversable.js'; /** * @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>;