/** * `Compactable` represents data structures which can be _compacted_/_filtered_. This is a generalization of * `catOptions` as a new function `compact`. `compact` has relations with `Functor`, `Applicative`, * `Monad`, `Alternative`, and `Traversable` in that we can use these classes to provide the ability to * operate on a data type by eliminating intermediate `None`s. This is useful for representing the filtering out of * values, or failure. * * Adapted from https://github.com/LiamGoodacre/purescript-filterable/blob/master/src/Data/Compactable.purs * * @since 2.0.0 */ import { Either } from './Either' import { Functor, Functor1, Functor2, Functor2C, FunctorComposition, FunctorComposition11, FunctorComposition12, FunctorComposition12C, FunctorComposition21, FunctorComposition22, FunctorComposition22C, FunctorComposition2C1, Functor3C, FunctorComposition23C, FunctorComposition23 } from './Functor' import { HKT, Kind, Kind2, Kind3, URIS, URIS2, URIS3, URIS4, Kind4 } from './HKT' import { Option } from './Option' /** * A `Separated` type which holds `left` and `right` parts. * * @since 2.0.0 */ export interface Separated { readonly left: A readonly right: B } /** * @category type classes * @since 2.0.0 */ export interface Compactable { readonly URI: F /** * Compacts a data structure unwrapping inner Option */ readonly compact: (fa: HKT>) => HKT /** * Separates a data structure moving inner Left to the left side and inner Right to the right side of Separated */ readonly separate: (fa: HKT>) => Separated, HKT> } /** * @category type classes * @since 2.0.0 */ export interface Compactable1 { readonly URI: F readonly compact: (fa: Kind>) => Kind readonly separate: (fa: Kind>) => Separated, Kind> } /** * @category type classes * @since 2.0.0 */ export interface Compactable2 { readonly URI: F readonly compact: (fa: Kind2>) => Kind2 readonly separate: (fa: Kind2>) => Separated, Kind2> } /** * @category type classes * @since 2.0.0 */ export interface Compactable2C { readonly URI: F readonly _E: E readonly compact: (fa: Kind2>) => Kind2 readonly separate: (fa: Kind2>) => Separated, Kind2> } /** * @category type classes * @since 2.0.0 */ export interface Compactable3 { readonly URI: F readonly compact: (fa: Kind3>) => Kind3 readonly separate: (fa: Kind3>) => Separated, Kind3> } /** * @category type classes * @since 2.2.0 */ export interface Compactable3C { readonly URI: F readonly compact: (fa: Kind3>) => Kind3 readonly separate: (fa: Kind3>) => Separated, Kind3> } /** * @category type classes * @since 2.0.0 */ export interface Compactable4 { readonly URI: F readonly compact: (fa: Kind4>) => Kind4 readonly separate: ( fa: Kind4> ) => Separated, Kind4> } /** * @since 2.0.0 */ export interface CompactableComposition extends FunctorComposition { readonly compact: (fga: HKT>>) => HKT> readonly separate: (fge: HKT>>) => Separated>, HKT>> } /** * @since 2.0.0 */ export interface CompactableComposition11 extends FunctorComposition11 { readonly compact: (fga: Kind>>) => Kind> readonly separate: (fge: Kind>>) => Separated>, Kind>> } /** * @since 2.0.0 */ export interface CompactableComposition12 extends FunctorComposition12 { readonly compact: (fga: Kind>>) => Kind> readonly separate: ( fge: Kind>> ) => Separated>, Kind>> } /** * @since 2.0.0 */ export interface CompactableComposition12C extends FunctorComposition12C { readonly compact: (fga: Kind>>) => Kind> readonly separate: ( fge: Kind>> ) => Separated>, Kind>> } /** * @since 2.0.0 */ export interface CompactableComposition21 extends FunctorComposition21 { readonly compact: (fga: Kind2>>) => Kind2> readonly separate: ( fge: Kind2>> ) => Separated>, Kind2>> } /** * @since 2.0.0 */ export interface CompactableComposition2C1 extends FunctorComposition2C1 { readonly compact: (fga: Kind2>>) => Kind2> readonly separate: ( fge: Kind2>> ) => Separated>, Kind2>> } /** * @since 2.0.0 */ export interface CompactableComposition22 extends FunctorComposition22 { readonly compact: (fga: Kind2>>) => Kind2> readonly separate: ( fge: Kind2>> ) => Separated>, Kind2>> } /** * @since 2.0.0 */ export interface CompactableComposition22C extends FunctorComposition22C { readonly compact: (fga: Kind2>>) => Kind2> readonly separate: ( fge: Kind2>> ) => Separated>, Kind2>> } /** * @since 2.2.0 */ export interface CompactableComposition23 extends FunctorComposition23 { readonly compact: (fga: Kind2>>) => Kind2> readonly separate: ( fge: Kind2>> ) => Separated>, Kind2>> } /** * @since 2.2.0 */ export interface CompactableComposition23C extends FunctorComposition23C { readonly compact: (fga: Kind2>>) => Kind2> readonly separate: ( fge: Kind2>> ) => Separated>, Kind2>> } /** * @since 2.0.0 */ export declare function getCompactableComposition( F: Functor2, G: Compactable3C & Functor3C ): CompactableComposition23C export declare function getCompactableComposition( F: Functor2, G: Compactable2C & Functor2C ): CompactableComposition22C export declare function getCompactableComposition( F: Functor2, G: Compactable2 & Functor2 ): CompactableComposition22 export declare function getCompactableComposition( F: Functor2C, G: Compactable1 & Functor1 ): CompactableComposition2C1 export declare function getCompactableComposition( F: Functor2, G: Compactable1 & Functor1 ): CompactableComposition21 export declare function getCompactableComposition( F: Functor1, G: Compactable2C & Functor2C ): CompactableComposition12 export declare function getCompactableComposition( F: Functor1, G: Compactable2 & Functor2 ): CompactableComposition12 export declare function getCompactableComposition( F: Functor1, G: Compactable1 & Functor1 ): CompactableComposition11 export declare function getCompactableComposition( F: Functor, G: Compactable & Functor ): CompactableComposition