Type Alias Expression<atom>

Expression<atom>:
    | {
        primitive: SyntaxPrimitive;
        tag: atom["Tag"];
        type: "PrimitiveExpression";
    }
    | {
        intrinsic: Intrinsic;
        tag: atom["Tag"];
        type: "IntrinsicExpression";
    }
    | {
        import: atom["Specifier"] | null;
        source: atom["Source"];
        tag: atom["Tag"];
        type: "ImportExpression";
    }
    | {
        tag: atom["Tag"];
        type: "ReadExpression";
        variable: Parameter | atom["Variable"];
    }
    | {
        asynchronous: boolean;
        body: HeadlessRoutineBlock<atom>;
        kind: HeadlessClosureKind;
        tag: atom["Tag"];
        type: "ClosureExpression";
    }
    | {
        asynchronous: boolean;
        body: HeadfulRoutineBlock<atom>;
        kind: HeadfulClosureKind;
        tag: atom["Tag"];
        type: "ClosureExpression";
    }
    | {
        promise: Expression<atom>;
        tag: atom["Tag"];
        type: "AwaitExpression";
    }
    | {
        delegate: boolean;
        item: Expression<atom>;
        tag: atom["Tag"];
        type: "YieldExpression";
    }
    | {
        head: Effect<atom>[];
        tag: atom["Tag"];
        tail: Expression<atom>;
        type: "SequenceExpression";
    }
    | {
        alternate: Expression<atom>;
        consequent: Expression<atom>;
        tag: atom["Tag"];
        test: Expression<atom>;
        type: "ConditionalExpression";
    }
    | {
        code: Expression<atom>;
        tag: atom["Tag"];
        type: "EvalExpression";
    }
    | {
        arguments: Expression<atom>[];
        callee: Expression<atom>;
        tag: atom["Tag"];
        this: Expression<atom>;
        type: "ApplyExpression";
    }
    | {
        arguments: Expression<atom>[];
        callee: Expression<atom>;
        tag: atom["Tag"];
        type: "ConstructExpression";
    }

Type Parameters