# concatMapEffect

Maps each element to an Effect and concatenates the results sequentially.

## Signatures

```ts
export declare const concatMapEffect: FlatMapEffectLike;
```

## Why

This is the Effect-producing form of {@link concatMap}. It makes serialized
commands explicit without requiring callers to wrap each Effect with
`Fx.fromEffect`.

## Ordering and cardinality

Each source value starts one Effect only after the previous Effect has
completed. Each successful Effect emits exactly one value, so output order is
source order and there is no overlap or buffering of successful results.

## Ownership and lifetime

Source failures and Effect failures remain typed; callback services are added
to the output requirements. The returned Fx requires `Scope`, which owns the
active callback Effect and interrupts it when observation ends.

## Examples

```ts
import { Fx } from "@typed/fx"
import { Effect } from "effect"

const saved = Fx.concatMapEffect(Fx.fromIterable([
  { id: "first", wait: "20 millis" as const },
  { id: "second", wait: "1 millis" as const }
]), ({ id, wait }) => Effect.as(Effect.sleep(wait), id))

const program = Effect.scoped(Fx.collectAll(saved))
Effect.runPromise(program).then(console.log)
// ["first", "second"]
```
