import { type Environment, type Frame } from "../env";
import type { EvaluatorContext } from "../evaluator/context";
import type { Expr } from "../expr";
import type { FunctionValue } from "../function-value";
import { type Value } from "../value";
import type { ArrayType, ComptimeListType, DynType, EnumType, FnTraitType, FunctionForallParameter, FunctionParameter, FunctionParameterExprs, FutureEffect, FunctionReturn, FunctionType, FutureTraitType, IsoType, SourceNamespaceType, PtrType, StrType, SomeType, StructType, TraitType, TupleType, Type, TypeApplicationType, TypeField, TypeHierarchyType, UnionType, VoidType } from "./definitions";
export declare function createComptimeIntType(): Type;
export declare function createComptimeFloatType(): Type;
export declare function createComptimeStringType(): Type;
export declare function createExprType(): Type;
export declare function createComptimeListType(childType: Type): ComptimeListType;
export declare function createExprListType(): Type;
export declare function createBooleanType(): Type;
export declare function createUsizeType(): Type;
export declare function createIsizeType(): Type;
export declare function createU8Type(): Type;
export declare function createI8Type(): Type;
export declare function createU16Type(): Type;
export declare function createI16Type(): Type;
export declare function createU32Type(): Type;
export declare function createI32Type(): Type;
export declare function createU64Type(): Type;
export declare function createI64Type(): Type;
export declare function createF32Type(): Type;
export declare function createF64Type(): Type;
export declare function createUnitType(): Type;
export declare function createCharType(): Type;
export declare function createShortType(): Type;
export declare function createUShortType(): Type;
export declare function createIntType(): Type;
export declare function createUIntType(): Type;
export declare function createLongType(): Type;
export declare function createULongType(): Type;
export declare function createLongLongType(): Type;
export declare function createULongLongType(): Type;
export declare function createLongDoubleType(): Type;
export declare function createType0(baseType?: Type): TypeHierarchyType;
export declare function createArrayType(childType: Type, length: Value): ArrayType;
export declare function createStrType(_env?: Environment): StrType;
export declare function createVoidType(): VoidType;
export declare function createTupleType(fields: TypeField[]): TupleType;
export declare function createStructType(env: Environment, isReferenceSemantics?: boolean, isNewtype?: boolean, isAtomicRc?: boolean): StructType;
export declare function createSourceNamespaceType(env: Environment): SourceNamespaceType;
export declare function createTraitType(env: Environment): TraitType;
export declare function createEnumType(env: Environment): EnumType;
export declare function createUnionType(env: Environment): UnionType;
export declare function createFunctionType({ parameters, forallParameters, variadicParameter, whereClauseExprs, requiresExprs, ensuresExprs, return_, env, parametersFrame, SelfType, SelfTraitType, isClosure, isControl, }: {
    parameters: FunctionParameter[];
    forallParameters: FunctionForallParameter[];
    variadicParameter: FunctionParameter | undefined;
    whereClauseExprs?: Expr[];
    requiresExprs?: Expr[];
    ensuresExprs?: Expr[];
    return_: FunctionReturn;
    env: Environment;
    parametersFrame: Frame;
    SelfType?: Type;
    SelfTraitType?: Type;
    isClosure?: boolean;
    isControl?: boolean;
}): FunctionType;
export declare function createPtrType(childType: Type): PtrType;
export declare function createIsoType(childType: Type, env: Environment): IsoType;
export declare function createSomeType(type: TypeHierarchyType, variableName: string, { id, requiredTraits, negativeTraits, recursiveTypeRef, env, context, }: {
    id?: string;
    requiredTraits?: TraitType[];
    negativeTraits?: TraitType[];
    recursiveTypeRef?: {
        functionValue: FunctionValue;
        argValues: Value[];
    };
    env: Environment;
    context: EvaluatorContext;
}): SomeType;
export declare function createTypeHierarchy(level: number, baseType?: Type): TypeHierarchyType;
export declare function getFunctionParameterExprs({ expr, labelExpr, typeExpr, defaultValueExpr, assignedValueExpr, }: {
    expr: Expr;
    labelExpr: Expr | undefined;
    typeExpr: Expr;
    defaultValueExpr: Expr | undefined;
    assignedValueExpr: Expr | undefined;
}): FunctionParameterExprs;
export declare function createFnTraitType(fnType: FunctionType, env: Environment): FnTraitType;
export declare function createFutureTraitType(outputType: Type, env: Environment, effect?: FutureEffect): FutureTraitType;
export declare function createDynType({ requiredTraits, env, negativeTraits, }: {
    requiredTraits: TraitType[];
    env: Environment;
    negativeTraits?: TraitType[];
}): DynType;
export declare function createTypeApplicationType(constructor: SomeType, args: Type[], resultKind: Type, env: Environment): TypeApplicationType;
export declare function clearAllCachedTypes(): void;
