# `PtcRunner.Lisp.Env.Builtin`
[🔗](https://github.com/andreasronge/ptc_runner/blob/main/lib/ptc_runner/lisp/env/builtin.ex#L1)

Metadata wrapper for callable environment builtins.

Runtime-created callables still use the raw tuple shapes; this wrapper is for
Env bindings where we know the public builtin name and validation contract.

# `raw_binding`

```elixir
@type raw_binding() ::
  {:normal, function()}
  | {:variadic, function(), term()}
  | {:variadic_nonempty, atom(), function()}
  | {:multi_arity, atom(), tuple()}
  | {:collect, function()}
```

# `t`

```elixir
@type t() :: %PtcRunner.Lisp.Env.Builtin{
  args: term(),
  binding: raw_binding(),
  name: atom()
}
```

# `args`

```elixir
@spec args(t() | term()) :: term()
```

# `builtin?`

```elixir
@spec builtin?(term()) :: boolean()
```

# `name`

```elixir
@spec name(t() | term()) :: atom() | nil
```

# `unwrap`

```elixir
@spec unwrap(t() | term()) :: term()
```

# `wrap`

```elixir
@spec wrap(atom(), raw_binding(), term()) :: t()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
