import { CrochetModule } from "../vm"; export declare abstract class CrochetValue { abstract type: CrochetType; readonly _projection: IProjection | null; readonly _selection: ISelection | null; as_bool(): boolean; to_js(): any; equals(other: CrochetValue): boolean; not_equals(other: CrochetValue): boolean; to_text(transparent?: boolean): string; to_debug_text(transparent?: boolean): string; to_json(): any; get projection(): IProjection; get selection(): ISelection; } export interface IProjection { project(name: string, requestee_module: CrochetModule | null): CrochetValue; } export interface ISelection { select(selections: Selection[], requestee_module: CrochetModule | null): CrochetValue; } export declare type Selection = { key: string; alias: string; }; export declare abstract class CrochetType { abstract type_name: string; abstract parent: CrochetType | null; private _static_type; get static_type(): CrochetTypeInstance; accepts(x: CrochetValue): boolean; is_subtype(type: CrochetType): boolean; distance(): number; coerce(x: CrochetValue): CrochetValue | null; readonly module: CrochetModule | null; get location(): string; get documentation(): string; } export declare class TCrochetTypeInstance extends CrochetType { readonly type: string; get type_name(): string; get parent(): TCrochetAny; constructor(type: string); } export declare class CrochetTypeInstance extends CrochetValue { readonly type_wrapped: CrochetType; readonly type: CrochetType; constructor(type_wrapped: CrochetType); } export declare class TCrochetAny extends CrochetType { readonly type_name = "any"; readonly parent: null; coerce(x: CrochetValue): CrochetValue | null; static type: TCrochetAny; } export declare class TCrochetNothing extends CrochetType { readonly type_name = "nothing"; readonly parent: TCrochetAny; static type: TCrochetNothing; } export declare class CrochetNothing extends CrochetValue { get type(): TCrochetNothing; as_bool(): boolean; to_text(): string; to_json(): null; static instance: CrochetNothing; } export declare function type_name(x: any): string;