# Sink.make

Creates a Sink from success and failure callbacks.

## Signatures

```ts
export declare function make<A, E = never, R = never, R2 = R>(onFailure: (cause: Cause.Cause<E>) => Effect<unknown, never, R>, onSuccess: (value: A) => Effect<unknown, never, R2>): Sink<A, E, R | R2>;
```

## Why

`make` is the smallest adapter from ordinary Effect programs to an `Fx` consumer.

## Ownership and lifetime

Construction is pure and acquires nothing. Callback ordering and concurrency belong to the
invoking producer; this adapter adds no queue. Callbacks are interrupted with their delivery
owners. Requirements from both callbacks are combined in the returned
sink; callback defects remain defects, while typed producer failures arrive through `onFailure`.

## Examples

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

const sink = Sink.make(Effect.logError, (value: number) => Effect.log(value))
```
