import { Type } from "../ir"; import { CrochetValue } from "../primitives"; import { State } from "../vm"; export declare class UnificationEnvironment { private bindings; get boundValues(): Map; try_lookup(name: string): CrochetValue | undefined; lookup(name: string): CrochetValue; bind(name: string, value: CrochetValue): void; clone(): UnificationEnvironment; static from(map: Map): UnificationEnvironment; static empty(): UnificationEnvironment; } export declare abstract class Pattern { abstract unify(state: State, env: UnificationEnvironment, value: CrochetValue): UnificationEnvironment | null; aunify(state: State, env: UnificationEnvironment, value: CrochetValue): UnificationEnvironment[]; get variables(): string[]; } export declare class TypePattern extends Pattern { readonly pattern: Pattern; readonly type: Type; constructor(pattern: Pattern, type: Type); unify(state: State, env: UnificationEnvironment, value: CrochetValue): UnificationEnvironment | null; } export declare class ValuePattern extends Pattern { readonly value: CrochetValue; constructor(value: CrochetValue); unify(state: State, env: UnificationEnvironment, value: CrochetValue): UnificationEnvironment | null; } export declare class GlobalPattern extends Pattern { readonly name: string; constructor(name: string); unify(state: State, env: UnificationEnvironment, other: CrochetValue): UnificationEnvironment | null; } export declare class SelfPattern extends Pattern { unify(state: State, env: UnificationEnvironment, other: CrochetValue): UnificationEnvironment | null; } export declare class VariablePattern extends Pattern { readonly name: string; constructor(name: string); unify(state: State, env: UnificationEnvironment, value: CrochetValue): UnificationEnvironment | null; get variables(): string[]; } export declare class WildcardPattern extends Pattern { unify(state: State, env: UnificationEnvironment, _value: CrochetValue): UnificationEnvironment | null; }