import { type Environment } from "../env";
import type { Token } from "../token";
import type { DynType, FnTraitType, FutureTraitType, SomeType, TraitType, Type } from "../types/definitions";
import type { EvaluatorContext } from "./context";
export declare function markConcreteImplBeingRegistered(typeId: string, traitId: string): void;
export declare function unmarkConcreteImplBeingRegistered(typeId: string, traitId: string): void;
export declare function typeImplementsTrait({ targetType, traitType, env, }: {
    targetType: Type;
    traitType: TraitType;
    env: Environment;
}): {
    implemented: boolean;
    env: Environment;
};
export declare function typeImplementsTraitBool({ targetType, traitType, env, }: {
    targetType: Type;
    traitType: TraitType;
    env: Environment;
}): boolean;
export declare function checkTypeImplementsSelfConstraints({ targetType, traitType, env, errorToken, }: {
    targetType: Type;
    traitType: TraitType;
    env: Environment;
    errorToken: Token;
}): void;
export declare function typeImplementsComptime(type: Type, env: Environment): boolean;
export declare function findSomeTypeMissingComptimeConstraint(type: Type, env: Environment): SomeType | undefined;
export declare function typeImplementsRuntime(type: Type, env: Environment): boolean;
export declare function beginSendDerivation(typeId: string): void;
export declare function endSendDerivation(typeId: string): void;
export declare function typeImplementsSend(type: Type | undefined, env: Environment): boolean;
export declare function typeImplementsDispose(type: Type | undefined, env: Environment): boolean;
export declare function typeImplementsAcyclic(type: Type | undefined, env: Environment): boolean;
export declare function typeIsComptimeOnly(type: Type, env: Environment): boolean;
export declare function typeIsRuntimeOnly(type: Type, env: Environment): boolean;
export declare function typeImplementsFn(type: Type | undefined): type is (SomeType | DynType) & {
    isFn: true;
};
export declare function extractFnTraitFromType(type: Type, env?: Environment): FnTraitType | undefined;
export declare function typeImplementsFuture(type: Type | undefined): type is (SomeType | DynType) & {
    isFuture: true;
};
export declare function extractFutureTraitFromType(type: Type): FutureTraitType | undefined;
export declare function validateTypeAvailability(type: Type, env: Environment, token: Token, _context?: EvaluatorContext): void;
