import * as E from 'fp-ts/es6/Eq'
import { Schemable1, WithRefine1, WithUnknownContainers1 } from './Schemable'
import Eq = E.Eq
/**
 * @since 2.2.3
 */
export declare type URI = E.URI
/**
 * @since 2.2.2
 */
export declare type TypeOf<E> = E extends Eq<infer A> ? A : never
/**
 * @category primitives
 * @since 2.2.2
 */
export declare const string: Eq<string>
/**
 * @category primitives
 * @since 2.2.2
 */
export declare const number: Eq<number>
/**
 * @category primitives
 * @since 2.2.2
 */
export declare const boolean: Eq<boolean>
/**
 * @category primitives
 * @since 2.2.2
 */
export declare const UnknownArray: Eq<Array<unknown>>
/**
 * @category primitives
 * @since 2.2.2
 */
export declare const UnknownRecord: Eq<Record<string, unknown>>
/**
 * @category combinators
 * @since 2.2.2
 */
export declare function nullable<A>(or: Eq<A>): Eq<null | A>
/**
 * @category combinators
 * @since 2.2.15
 */
export declare const struct: <A>(
  eqs: {
    [K in keyof A]: Eq<A[K]>
  }
) => Eq<
  {
    [K in keyof A]: A[K]
  }
>
/**
 * Use `struct` instead.
 *
 * @category combinators
 * @since 2.2.2
 * @deprecated
 */
export declare const type: <A>(eqs: { [K in keyof A]: E.Eq<A[K]> }) => E.Eq<{ [K_1 in keyof A]: A[K_1] }>
/**
 * @category combinators
 * @since 2.2.2
 */
export declare function partial<A>(
  properties: {
    [K in keyof A]: Eq<A[K]>
  }
): Eq<
  Partial<
    {
      [K in keyof A]: A[K]
    }
  >
>
/**
 * @category combinators
 * @since 2.2.2
 */
export declare const record: <A>(codomain: Eq<A>) => Eq<Record<string, A>>
/**
 * @category combinators
 * @since 2.2.2
 */
export declare const array: <A>(eq: Eq<A>) => Eq<Array<A>>
/**
 * @category combinators
 * @since 2.2.2
 */
export declare const tuple: <A extends ReadonlyArray<unknown>>(
  ...components: {
    [K in keyof A]: Eq<A[K]>
  }
) => Eq<A>
/**
 * @category combinators
 * @since 2.2.2
 */
export declare const intersect: <B>(right: E.Eq<B>) => <A>(left: E.Eq<A>) => E.Eq<A & B>
/**
 * @category combinators
 * @since 2.2.2
 */
export declare function sum<T extends string>(
  tag: T
): <A>(
  members: {
    [K in keyof A]: Eq<A[K] & Record<T, K>>
  }
) => Eq<A[keyof A]>
/**
 * @category combinators
 * @since 2.2.2
 */
export declare function lazy<A>(f: () => Eq<A>): Eq<A>
/**
 * @category combinators
 * @since 2.2.15
 */
export declare const readonly: <A>(eq: Eq<A>) => Eq<Readonly<A>>
/**
 * @category instances
 * @since 2.2.8
 */
export declare const Schemable: Schemable1<E.URI>
/**
 * @category instances
 * @since 2.2.8
 */
export declare const WithUnknownContainers: WithUnknownContainers1<E.URI>
/**
 * @category instances
 * @since 2.2.8
 */
export declare const WithRefine: WithRefine1<E.URI>