# `Reach.Evidence.ParameterShape.Fact`
[🔗](https://github.com/elixir-vibe/reach/blob/v2.8.4/lib/reach/evidence/parameter_shape.ex#L25)

Observed fixed-map shape variants for one function parameter.

# `function_id`

```elixir
@type function_id() :: {module() | nil, atom(), non_neg_integer()}
```

# `key`

```elixir
@type key() :: atom() | String.t()
```

# `t`

```elixir
@type t() :: %Reach.Evidence.ParameterShape.Fact{
  callers: [function_id()],
  companion_dispatch?: boolean(),
  consumed_keys: [key()],
  core_keys: [key()],
  defensive_consumed_keys: [key()],
  entropy: float(),
  file: Path.t() | nil,
  intentional_dispatch?: boolean(),
  line: pos_integer() | nil,
  occurrences: [Reach.Evidence.ParameterShape.Occurrence.t()],
  optional_keys: [key()],
  parameter: atom() | String.t(),
  parameter_index: non_neg_integer(),
  role: :domain | :non_contract,
  strict_consumed_keys: [key()],
  tagged_variants?: boolean(),
  target: function_id(),
  union_keys: [key()],
  variants: [[key()]]
}
```

---

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