# `Beaver.Composer`

This module provide functions to compose and run passes.

# `composer`

```elixir
@type composer() :: t()
```

# `operation`

```elixir
@type operation() :: Beaver.MLIR.Module.t() | Beaver.MLIR.Operation.t()
```

# `run_option`

```elixir
@type run_option() ::
  {:debug, boolean()}
  | {:print, boolean()}
  | {:timing, boolean()}
  | {:verifier, boolean()}
```

# `run_result`

```elixir
@type run_result() :: {:ok, any()} | {:error, String.t()}
```

# `t`

```elixir
@type t() :: %Beaver.Composer{ctx: term(), op: operation(), passes: [any()]}
```

# `append`

# `init`

# `nested`

# `new`

# `run`

```elixir
@spec run(composer(), [run_option()]) :: run_result()
```

Run the passes on the operation.

> #### Elixir callback safety {: .info}
>
> Native pipelines and Elixir passes use the context's shared elastic LLVM
> thread pool outside BEAM scheduler threads. Nested callback work can expand
> the pool rather than starving it.

# `run!`

```elixir
@spec run!(composer(), [run_option()]) :: operation()
```

# `to_pipeline`

