import type { ResolvedSnippet, Snippet } from '../data/snippet.ts';
import { type AnyWgslData, type BaseData, type F32, type I32, type WgslArray } from '../data/wgslTypes.ts';
import { type ResolutionCtx, type SelfResolvable } from '../types.ts';
import { $internal, $resolve } from '../shared/symbols.ts';
export declare function numericLiteralToSnippet(value: number): Snippet;
export declare function concretize<T extends BaseData>(type: T): T | F32 | I32;
export declare function concretizeSnippet(snippet: Snippet): Snippet;
export declare function concretizeSnippets(args: Snippet[]): Snippet[];
export declare function coerceToSnippet(value: unknown): Snippet;
/**
 * Intermediate representation for WGSL array expressions.
 * Defers resolution. Stores array elements as snippets so the
 * generator can access them when needed.
 */
export declare class ArrayExpression implements SelfResolvable {
    readonly [$internal] = true;
    readonly type: WgslArray<AnyWgslData>;
    readonly elements: Snippet[];
    constructor(type: WgslArray<AnyWgslData>, elements: Snippet[]);
    toString(): string;
    [$resolve](ctx: ResolutionCtx): ResolvedSnippet;
}
