import type { Equal } from "../Equal/index.js"; import type { Identity } from "../Identity/index.js"; import * as IO from "../IO/index.js"; import * as DSL from "../Prelude/DSL/index.js"; import type { URI } from "../Prelude/index.js"; import * as P from "../Prelude/index.js"; import type { Show } from "../Show/index.js"; export declare type Forest = ReadonlyArray>; export interface Tree { readonly value: A; readonly forest: Forest; } export declare function make(value: A, forest?: Forest): Tree; export declare function getShow(S: Show): Show>; export declare function getEqual(E: Equal): Equal>; /** * Neat 2-dimensional drawing of a forest */ export declare function drawForest(forest: Forest): string; /** * Neat 2-dimensional drawing of a tree */ export declare function drawTree(tree: Tree): string; /** * Build a tree from a seed value */ export declare function unfoldTree(b: B, f: (b: B) => [A, Array]): Tree; /** * Build a tree from a seed value */ export declare function unfoldTreeSafe(b: B, f: (b: B) => [A, Array]): IO.IO>; /** * Build a tree from a seed value */ export declare function unfoldForest(bs: Array, f: (b: B) => [A, Array]): Forest; /** * Build a tree from a seed value */ export declare function unfoldForestSafe(bs: Array, f: (b: B) => [A, Array]): IO.IO>; /** * Monadic tree builder, in depth-first order */ export declare function unfoldTreeM(M: P.Monad & P.Applicative): (b: B, f: (b: B) => P.Kind]>) => P.Kind>; /** * Monadic forest builder, in depth-first order */ export declare function unfoldForestM(M: P.Monad & P.Applicative): (bs: Array, f: (b: B) => P.Kind]>) => P.Kind>; export declare function elem_(E: Equal): (fa: Tree, a: A) => boolean; export declare function elem(E: Equal): (a: A) => (fa: Tree) => boolean; /** * Fold a tree into a "summary" value in depth-first order. * * For each node in the tree, apply `f` to the `value` and the result of applying `f` to each `forest`. * * This is also known as the catamorphism on trees. */ export declare function fold(f: (a: A, bs: readonly B[]) => B): (tree: Tree) => B; export declare function map_(fa: Tree, f: (a: A) => B): Tree; export declare function of(a: A): Tree; export declare function ap_(fab: Tree<(a: A) => B>, fa: Tree): Tree; export declare function chain_(fa: Tree, f: (a: A) => Tree): Tree; export declare function reduce_(fa: Tree, b: B, f: (b: B, a: A) => B): B; export declare function foldMap_(M: Identity): (fa: Tree, f: (a: A) => M) => M; export declare function reduceRight_(fa: Tree, b: B, f: (a: A, b: B) => B): B; export declare const forEachF: P.ForeachFn<[URI<"Tree", {}>], P.Auto>; export declare const ForEach: P.ForEach<[URI<"Tree", {}>], P.Auto>; export declare const sequence: (App: P.Covariant & P.IdentityBoth) => (_: Tree>, P.OrFix<"Q", F[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", F[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", F[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", F[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", F[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", F[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", F[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, any>[Next[0]["_F"]] : A>[Next[0]["_F"]] : A>[Next[0]["_F"]] : A>[Next[0]["_F"]] : A>[Next[0]["_F"]] : A>[Next[0]["_F"]] : A>[Next[0]["_F"]] : A>[Next[0]["_F"]] : A>[Next[0]["_F"]] : A>[Next[0]["_F"]] : A>[F[0]["_F"]] : A>) => F extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", F[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", F[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", F[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", F[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", F[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", F[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", F[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, Next extends [any, ...infer Next] ? P.URItoKind>, P.OrFix<"Q", Next[0]["_C"], P.OrFix<"Q", FC, FQ>>, P.OrFix<"W", Next[0]["_C"], P.OrFix<"W", FC, FW>>, P.OrFix<"X", Next[0]["_C"], P.OrFix<"X", FC, FX>>, P.OrFix<"I", Next[0]["_C"], P.OrFix<"I", FC, FI>>, P.OrFix<"S", Next[0]["_C"], P.OrFix<"S", FC, FS>>, P.OrFix<"R", Next[0]["_C"], P.OrFix<"R", FC, FR>>, P.OrFix<"E", Next[0]["_C"], P.OrFix<"E", FC, FE>>, any>[Next[0]["_F"]] : Tree>[Next[0]["_F"]] : Tree>[Next[0]["_F"]] : Tree>[Next[0]["_F"]] : Tree>[Next[0]["_F"]] : Tree>[Next[0]["_F"]] : Tree>[Next[0]["_F"]] : Tree>[Next[0]["_F"]] : Tree>[Next[0]["_F"]] : Tree>[Next[0]["_F"]] : Tree>[F[0]["_F"]] : Tree; export declare function extract(wa: Tree): A; export declare function extend_(wa: Tree, f: (wa: Tree) => B): Tree; export declare function extend(f: (fa: Tree) => B): (ma: Tree) => Tree; export declare function ap(fa: Tree): (fab: Tree<(a: A) => B>) => Tree; export declare function apFirst(fb: Tree): (fa: Tree) => Tree; export declare function apFirst_(fa: Tree, fb: Tree): Tree; export declare function apSecond(fb: Tree): (fa: Tree) => Tree; export declare function apSecond_(fa: Tree, fb: Tree): Tree; export declare function chain(f: (a: A) => Tree): (ma: Tree) => Tree; export declare function tap(f: (a: A) => Tree): (ma: Tree) => Tree; export declare function tap_(ma: Tree, f: (a: A) => Tree): Tree; export declare function duplicate(ma: Tree): Tree>; export declare function flatten(mma: Tree>): Tree; export declare function foldMap(M: Identity): (f: (a: A) => M) => (fa: Tree) => M; export declare function map(f: (a: A) => B): (fa: Tree) => Tree; export declare function reduce(b: B, f: (b: B, a: A) => B): (fa: Tree) => B; export declare function reduceRight(b: B, f: (a: A, b: B) => B): (fa: Tree) => B; export declare const Foldable: P.Foldable<[URI<"Tree", {}>], P.Auto>; export declare const Monad: P.Monad<[URI<"Tree", {}>], P.Auto>; export declare const Applicative: P.Applicative<[URI<"Tree", {}>], P.Auto>; export declare const gen: , any>, AEff>(f: (i: (_: Tree) => DSL.GenHKT, A>) => Generator) => Tree; export declare const bind: (tag: Exclude, f: (a: BK) => Tree) => (fa: Tree) => Tree; declare const do_: Tree<{}>; export { do_ as do }; export { branch as if, branch_ as if_ }; export declare const struct: >, K = any, Q = any, W = any, X = any, I = any, S = any, R = any, E = any>(r: import("@effect-ts/system/Utils/index.js").EnforceNonEmptyRecord & Record>) => Tree<{ [K_1 in keyof NER]: P.Infer<[URI<"Tree", {}>], P.Auto, "A", NER[K_1]>; }>; export declare const tuple: [], K = any, Q = any, W = any, X = any, I = any, S = any, R = any, E = any>(...t: T & { readonly 0: Tree; }) => Tree<{ [K_1 in keyof T]: [T[K_1]] extends [Tree] ? A : never; }>; /** * Matchers */ export declare const match: (tag: N) => DSL.MatchFn<[URI<"Tree", {}>], P.Auto, N>, matchIn: (tag: N) => DSL.MatchInFn<[URI<"Tree", {}>], P.Auto, N>, matchMorph: (MorphADT: { tag: N; _A: X; }) => DSL.MatchMorphFn<[URI<"Tree", {}>], P.Auto, N, X>, matchTag: DSL.MatchFn<[URI<"Tree", {}>], P.Auto, "_tag">, matchTagIn: DSL.MatchInFn<[URI<"Tree", {}>], P.Auto, "_tag">; /** * Conditionals */ declare const branch: , Y extends Tree>(onTrue: () => X, onFalse: () => Y) => (predicate: boolean) => Tree], P.Auto, "A", X | Y>>; declare const branch_: , Y extends Tree>(predicate: boolean, onTrue: () => X, onFalse: () => Y) => Tree], P.Auto, "A", X | Y>>; //# sourceMappingURL=core.d.ts.map