export declare type ChangeTraceLeaf<T> = {
    from: T | undefined;
    to: T | undefined;
};
export declare type ChangeTraceNode<T> = {
    subs: (T extends any[] ? {
        [index: number]: ChangeTrace<T[number]>;
    } : Partial<{
        [K in keyof T]: ChangeTrace<T[K]>;
    }>) | {};
};
export declare type ChangeTrace<T> = ChangeTraceLeaf<T> | ChangeTraceNode<T>;
export interface Change<T> {
    value: T | undefined;
    trace?: ChangeTrace<T> | undefined;
}
export declare function isLeaf<T>(c: ChangeTrace<T> | undefined): c is ChangeTraceLeaf<T> | undefined;
