# MatchAst.Catch

A Match AST node defining a reactive cause boundary.

## Signatures

```ts
interface Catch {
    type: "catch";
    matches: ReadonlyArray<MatchAst>;
    f: (cause: RefSubject<Cause<any>>) => Fx<any, any, any>;
}
```

## Why

Complete Effect causes remain available to fallback UI rather than collapsing to strings.

## Ownership and lifetime

`Catch` describes plain readonly AST data. Routes and Matchers retain the concrete nodes they receive by reference; the type itself owns no resource.

## Property: f

The reactive complete-cause handler attached to a catch AST node.

## Property: f: Why

Fallback output can observe changing Effect causes while preserving typed Fx composition.

## Property: f: Ownership and lifetime

The handler function is retained by identity. The catch manager owns its cause RefSubject and
fallback Fx in a child Scope while the boundary remains selected.

## Property: matches

The ordered child matcher nodes wrapped by this boundary.

## Property: matches: Why

Order is preserved for candidate and guard fallthrough.

## Property: matches: Ownership and lifetime

The catch boundary retains this ordered child array by reference; active boundary Scopes are
created only when its Matcher runs.

## Property: type

The discriminant identifying this AST variant.

## Property: type: Why

Exhaustive switches can interpret syntax without instanceof checks or hidden classes.
