/**
 * @import { Site } from "@helios-lang/compiler-utils"
 * @typedef {import("./common.js").InferenceMap} InferenceMap
 * @typedef {import("./common.js").DataType} DataType
 * @typedef {import("./common.js").Func} Func
 * @typedef {import("./common.js").EvalEntity} EvalEntity
 * @typedef {import("./common.js").Parametric} Parametric
 * @typedef {import("./common.js").Type} Type
 * @typedef {import("./common.js").Typed} Typed
 * @typedef {import("./common.js").TypeClass} TypeClass
 */
/**
 * Data instances can be parametrics instances
 * @implements {Parametric}
 */
export class ParametricData extends Common implements Parametric {
    /**
     * @param {Parameter[]} params
     * @param {Type} dataType
     */
    constructor(params: Parameter[], dataType: Type);
    /**
     * @private
     * @readonly
     * @type {Parameter[]}
     */
    private readonly _params;
    /**
     * @private
     * @readonly
     * @type {Type}
     */
    private readonly _dataType;
    get params(): Parameter[];
    get dataType(): import("./common.js").Type;
    /**
     * null TypeClasses aren't included
     * @type {TypeClass[]}
     */
    get typeClasses(): import("./common.js").TypeClass[];
    /**
     * @param {Type[]} types
     * @param {Site} site
     * @returns {EvalEntity}
     */
    apply(types: Type[], site?: Site): EvalEntity;
    /**
     * @type {Parametric}
     */
    get asParametric(): import("./common.js").Parametric;
    /**
     * Must infer before calling
     * @param {Site} site
     * @param {Typed[]} args
     * @param {{[name: string]: Typed}} namedArgs
     * @param {Type[]} paramTypes - so that paramTypes can be accessed by caller
     * @returns {Func}
     */
    inferCall(site: Site, args: Typed[], namedArgs?: {
        [name: string]: Typed;
    }, paramTypes?: Type[]): Func;
    /**
     * @param {Site} site
     * @param {InferenceMap} map
     * @returns {Parametric}
     */
    infer(site: Site, map: InferenceMap): Parametric;
}
export type InferenceMap = import("./common.js").InferenceMap;
export type DataType = import("./common.js").DataType;
export type Func = import("./common.js").Func;
export type EvalEntity = import("./common.js").EvalEntity;
export type Parametric = import("./common.js").Parametric;
export type Type = import("./common.js").Type;
export type Typed = import("./common.js").Typed;
export type TypeClass = import("./common.js").TypeClass;
import { Common } from "./common.js";
import { Parameter } from "./Parameter.js";
import type { Site } from "@helios-lang/compiler-utils";
//# sourceMappingURL=ParametricData.d.ts.map