# GetSetDelete

Interface for basic RefSubject operations: get, set, delete.

## Signatures

```ts
export interface GetSetDelete<A, E = never, R = never> {
    readonly get: Effect.Effect<A, E, R>;
    readonly set: (a: A) => Effect.Effect<A, E, R>;
    readonly delete: Effect.Effect<Option.Option<A>, E, R>;
}
```

## Why

Interface for basic RefSubject operations: get, set, delete.

## Ownership and lifetime

GetSetDelete is a contract and performs no acquisition. Implementations retain the errors,
services, interruption, and Scope requirements expressed by its members.

## Property: delete

Removes and returns the value visible to the current transaction.

## Property: delete: Why

Removes the value from the current transaction and returns the previous value as `Some`, or
`None` when no value was present.

## Property: delete: Ownership and lifetime

Running delete performs one serialized subject transition and returns the committed value.
It acquires no resource and preserves source failures and services.

## Property: get

Reads the value visible to the current transaction.

## Property: get: Why

Reads the value visible inside the current transaction without publishing a change.

## Property: get: Ownership and lifetime

Running `get` performs no mutation or acquisition. It can fail with `E` and requires `R`; when
used by `updates`, it observes that transaction's buffered value.

## Property: set

Replaces the value inside the current transaction.

## Property: set: Why

The transition is serialized at the RefSubject rather than coordinated by callers or UI
components.

## Property: set: Ownership and lifetime

Running set performs one serialized subject transition and returns the committed value. It
acquires no resource and preserves source failures and services.
