# `Monty.Attention.GoalFilter`
[🔗](https://github.com/d-led/ex.tbp.monty/blob/v0.1.0/packages/ex_tbp_monty_core/lib/monty/attention/goal_filter.ex#L1)

Which goals attention leaves alone — Monty's `attention/goal_filter.py`.

Attention can *propose* to look somewhere and a goal filter can refuse it: a
goal that lands in a place the attention system has learned to avoid is not
worth pursuing this step, however well-specified it is.

Monty declares the filter as a `Protocol` over `__call__(voxel_grid, goals)`.
Here it is a behaviour whose `filter/2` is the same call, and the goal it
filters is this port's `Monty.Cmp.Goal`, whose `location` is `nil` when the goal
does not say where.

# `filter`

```elixir
@callback filter(Monty.Attention.VoxelGrid.t(), [Monty.Cmp.Goal.t()]) :: [
  Monty.Cmp.Goal.t()
]
```

The goals to pursue, given what attention knows.

---

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