# RefSubject.struct

Combines multiple `RefSubject`, `Computed`, or `Filtered` instances into a single struct.

## Signatures

```ts
export declare function struct<const Refs extends Readonly<Record<string, RefSubject.Any | Computed.Any | Filtered.Any>>>(refs: Refs): StructFrom<Refs>;
```

## Why

Combines several refs into one state value while preserving whether the result is writable,
computed, or filtered from its inputs.

## Ownership and lifetime

This declaration performs no acquisition and retains no resources. Implementations preserve
source errors, services, and lifetime.

## Examples

```ts
import { Effect } from "effect"
import * as RefSubject from "@typed/fx/RefSubject"

const program = Effect.gen(function* () {
  const firstName = yield* RefSubject.make("Alice")
  const lastName = yield* RefSubject.make("Smith")
  const age = yield* RefSubject.make(30)

  // Combine into a struct
  const person = RefSubject.struct({
    firstName,
    lastName,
    age
  })

  const fullPerson = yield* person
  console.log(fullPerson) // { firstName: "Alice", lastName: "Smith", age: 30 }

  // Update one field
  yield* RefSubject.set(firstName, "Bob")

  // Struct automatically updates
  const updated = yield* person
  console.log(updated.firstName) // "Bob"
})
```
