# update

Update a property value in the current state of a RefStruct using a function.

## Signatures

```ts
export declare const update: {
    <S extends object, K extends keyof S>(key: K, f: (value: S[K]) => S[K]): <E, R>(ref: RefStruct<S, E, R>) => Effect.Effect<S, E, R>;
    <S extends object, K extends keyof S, E, R>(ref: RefStruct<S, E, R>, key: K, f: (value: S[K]) => S[K]): Effect.Effect<S, E, R>;
};
```

## Why

Keeps update atomic with respect to competing RefSubject writes instead of splitting the read
and replacement into separate effects.

## Ownership and lifetime

Running update performs one serialized struct transition and resolves with its committed value.
It acquires no resource; failures and services remain those of the source ref.
