/** * This file contains the Sync algebraic data type. Sync is an lazy function * that takes no inputs. In other functional languages and runtimes sync is * referred to as IO. * * @module Sync * @since 2.0.0 */ import "./_dnt.polyfills.js"; import type { $, Kind, Out } from "./kind.js"; import type { Applicable } from "./applicable.js"; import type { Combinable } from "./combinable.js"; import type { Flatmappable } from "./flatmappable.js"; import type { Initializable } from "./initializable.js"; import type { Mappable } from "./mappable.js"; import type { Foldable } from "./foldable.js"; import type { Traversable } from "./traversable.js"; import type { Wrappable } from "./wrappable.js"; /** * @since 2.0.0 */ export type Sync = () => A; /** * @since 2.0.0 */ export interface KindSync extends Kind { readonly kind: Sync>; } /** * @since 2.0.0 */ export declare function wrap(a: A): Sync; /** * @since 2.0.0 */ export declare function apply(ua: Sync): (ta: Sync<(a: A) => I>) => Sync; /** * @since 2.0.0 */ export declare function map(fai: (a: A) => I): (ta: Sync) => Sync; /** * @since 2.0.0 */ export declare function flatmap(fati: (a: A) => Sync): (ta: Sync) => Sync; /** * @since 2.0.0 */ export declare function fold(foao: (o: O, a: A) => O, o: O): (ta: Sync) => O; /** * @since 2.0.0 */ export declare function traverse(A: Applicable & Mappable): (faui: (a: A) => $) => (ta: Sync) => $, J, K], [L], [M]>; /** * @since 2.0.0 */ export declare function getCombinableSync({ combine }: Combinable): Combinable>; /** * @since 2.0.0 */ export declare function getInitializableSync(I: Initializable): Initializable>; /** * @since 2.0.0 */ export declare const ApplicableSync: Applicable; /** * @since 2.0.0 */ export declare const FlatmappableSync: Flatmappable; /** * @since 2.0.0 */ export declare const FoldableSync: Foldable; /** * @since 2.0.0 */ export declare const MappableSync: Mappable; /** * @since 2.0.0 */ export declare const TraversableSync: Traversable; /** * @since 2.0.0 */ export declare const WrappableSync: Wrappable; /** * @since 2.0.0 */ export declare const tap: (fn: (value: A) => void) => (ua: Sync) => Sync; /** * @since 2.0.0 */ export declare const bind: (name: Exclude, faui: (a: A) => Sync) => (ua: Sync) => Sync<{ readonly [K_1 in N | keyof A]: K_1 extends keyof A ? A[K_1] : I; }>; /** * @since 2.0.0 */ export declare const bindTo: (name: N) => (ua: Sync) => Sync<{ readonly [K in N]: A; }>;