# `Beaver.Deferred`

Functions to work with IR entities not eagerly created. Usually it is an attribute/type doesn't get created until there is a MLIR context from block/op state.

# `attribute`

```elixir
@type attribute() :: contextual(Beaver.MLIR.Attribute.t())
```

# `context_arg`

```elixir
@type context_arg() :: Beaver.MLIR.Context.t()
```

# `contextual`

```elixir
@type contextual(t) :: t | (context_arg() -&gt; t)
```

# `deferred`

```elixir
@type deferred(t) :: contextual(t)
```

# `operation`

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

# `opts`

```elixir
@type opts() :: [{:ctx, context_arg()}]
```

# `type`

```elixir
@type type() :: contextual(Beaver.MLIR.Type.t())
```

# `create`

# `fetch_context`

```elixir
@spec fetch_context(opts :: opts()) :: Beaver.MLIR.Context.t() | nil
```

# `fetch_insertion_point`

```elixir
@spec fetch_insertion_point(opts :: opts()) ::
  Beaver.MLIR.Block.t()
  | Beaver.MLIR.PatternRewriter.t()
  | Beaver.MLIR.RewriterBase.t()
  | Macro.t()
  | nil
```

# `from_opts`

```elixir
@spec from_opts(opts(), (context_arg() -&gt; t)) :: contextual(t) when t: var
```

