import type { Lazy } from "../../Function"
import * as ST from "../../Structural"
import type * as ARM from "../AssertionResultM"
import * as PR from "../Primitives"
import type * as R from "../Render"
/**
 * An `AssertionM[A]` is capable of producing assertion results on an `A`. As a
 * proposition, assertions compose using logical conjunction and disjunction,
 * and can be negated.
 */
export declare abstract class AssertionM<A> implements ST.HasEquals {
  readonly render: () => R.Render
  readonly runM: (a: Lazy<A>) => ARM.AssertResultM;
  readonly [PR._A]: (_: A) => void
  constructor(render: () => R.Render, runM: (a: Lazy<A>) => ARM.AssertResultM)
  get stringify(): string
  toString(): string
  [ST.equalsSym](that: unknown): boolean
  get [ST.hashSym](): number
}
export declare function isAssertionM(that: unknown): that is AssertionM<unknown>
//# sourceMappingURL=AssertionM.d.ts.map
