# `Arrow.Type`

Arrow logical types. Each type is a distinct struct under `Arrow.Type.*`.

Types parameterized by FlatBuffers tables (`Int`, `FloatingPoint`, `Date`,
`Timestamp`, ...) carry their parameters as fields. Children of nested types
(`List`, `Struct`) live on the enclosing `Arrow.Field`, mirroring the Arrow
schema layout.

# `t`

```elixir
@type t() ::
  %Arrow.Type.Null{}
  | %Arrow.Type.Bool{}
  | %Arrow.Type.Int{bit_width: term(), signed: term()}
  | %Arrow.Type.FloatingPoint{precision: term()}
  | %Arrow.Type.Utf8{}
  | %Arrow.Type.Binary{}
  | %Arrow.Type.Date{unit: term()}
  | %Arrow.Type.Timestamp{timezone: term(), unit: term()}
  | %Arrow.Type.List{}
  | %Arrow.Type.Struct{}
  | %Arrow.Type.Time{bit_width: term(), unit: term()}
  | %Arrow.Type.Duration{unit: term()}
  | %Arrow.Type.FixedSizeBinary{byte_width: term()}
  | %Arrow.Type.FixedSizeList{list_size: term()}
  | %Arrow.Type.Decimal{bit_width: term(), precision: term(), scale: term()}
  | %Arrow.Type.Map{keys_sorted: term()}
  | %Arrow.Type.Interval{unit: term()}
  | %Arrow.Type.LargeUtf8{}
  | %Arrow.Type.LargeBinary{}
  | %Arrow.Type.LargeList{}
```

# `primitive_array_mod`

```elixir
@spec primitive_array_mod(t()) :: module()
```

Returns the `Arrow.Array.*` struct module that stores values of `type`.
Covers Int / FloatingPoint / Decimal — the types where the concrete
Array module is selected by a numeric parameter on the Type. Other
types have a 1:1 mapping and don't need a resolver.

# `primitive_kind`

```elixir
@spec primitive_kind(t()) :: Arrow.Buffer.primitive_kind()
```

Returns the `t:Arrow.Buffer.primitive_kind/0` atom for the primitive
type's values buffer.

---

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