import type { Lazy } from "../../Function/index.js";
import * as O from "../../Option/index.js";
import * as ST from "../../Structural/index.js";
import * as AD from "../AssertionData/index.js";
import type * as AssertionM from "../AssertionM/AssertionM.js";
import type * as AR from "../AssertionResult/index.js";
import type * as ARM from "../AssertionResultM/index.js";
import * as PR from "../Primitives/index.js";
import * as R from "../Render/index.js";
export declare class Assertion implements AssertionM.AssertionM {
readonly render: () => R.Render;
readonly run: (a: Lazy) => AR.AssertResult;
readonly [PR._A]: (_: A) => void;
constructor(render: () => R.Render, run: (a: Lazy) => AR.AssertResult);
runM(a: Lazy): ARM.AssertResultM;
get stringify(): string;
toString(): string;
[ST.equalsSym](that: unknown): boolean;
get [ST.hashSym](): number;
}
export declare function isAssertion(that: unknown): that is Assertion;
export declare function makeAssertion(name: string, ...params: R.RenderParam[]): (run: (a: Lazy) => boolean) => Assertion;
export declare function makeAssertionDirect(name: string, ...params: R.RenderParam[]): (run: (a: Lazy) => AR.AssertResult) => Assertion;
export declare const isFalse: Assertion;
export declare const isEmptyString: Assertion;
export declare function equalTo(expected: A): Assertion;
export declare function makeAssertionRec(name: string, ...params: R.RenderParam[]): (assertion: Assertion) => (get: (a: Lazy) => O.Option, orElse?: (ad: AD.AssertionData) => AR.AssertResult) => Assertion;
export declare function hasProperty(name: string, proj: (a: A) => B, assertion: Assertion): Assertion;
export declare function and(self: Assertion, that: Assertion): Assertion;
export declare function or(self: Assertion, that: Assertion): Assertion;
//# sourceMappingURL=index.d.ts.map