import { Kind } from '../../kinds/index.js'; import { TPair } from '../../data/pair'; import { TypeSkell } from '../../typeskell/index.js'; export declare namespace SemiAlign { type $zipWith = TypeSkell<'(a b -> c) -> F a ..x -> F b ..y -> F c ..xy', { F: F; }>; type $zip = TypeSkell<'F a ..x -> F b ..y -> F (Pair a b) ..xy', { F: F; Pair: TPair; }>; } /** * SemiAlign is a typeclass for types that can be zipped together. * it is a weaker version of Align. * ZipWith has the same signature as Applicative liftA2 but with different laws. */ export interface SemiAlign { /** * zipWith :: `(a b -> c) -> F a -> F b -> F c` */ zipWith: SemiAlign.$zipWith; } /** * zip :: `SemiAlign F => F a -> F b -> F (Pair a b)` */ export declare const zip: (semiAlign: SemiAlign) => SemiAlign.$zip;