# RefSubject.compact

Converts a `Computed` or `Filtered` of `Option<A>` into a `Filtered<A>`, filtering out `None` values.

## Signatures

```ts
export declare const compact: {
    <A, E, R>(ref: Computed<Option.Option<A>, E, R>): Filtered<A, E, R>;
    <A, E, R>(ref: Filtered<Option.Option<A>, E, R>): Filtered<A, E, R>;
    <R0, E0, A, E, R, E2, R2>(versioned: Versioned.Versioned<R0, E0, Option.Option<A>, E, R, Option.Option<A>, E2, R2>): Filtered<A, E0 | E | Exclude<E, Cause.NoSuchElementError> | Exclude<E2, Cause.NoSuchElementError>, R0 | R2 | Exclude<R, Scope.Scope>>;
};
```

## Why

Converts a `Computed` or `Filtered` of `Option<A>` into a `Filtered<A>`, filtering out `None`
values. Current reads and pushed versions use the same derivation, preventing snapshot and
subscription behavior from diverging.

## Ownership and lifetime

The compact view retains no independent value. Its Effect read fails with NoSuchElement
while absent; the observing Scope owns and finalizes its Fx subscription.

## Examples

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

const program = Effect.gen(function* () {
  const maybeValue = yield* RefSubject.make(Option.some(42))

  // Compact the Option
  const filtered = RefSubject.compact(maybeValue)

  const value = yield* filtered
  console.log(value) // 42

  // If the Option becomes None, the Filtered will fail
  yield* RefSubject.set(maybeValue, Option.none())
  // yield* filtered would fail with NoSuchElementError
})
```
