A guard over bindings only, with no fact input.
A rule-level guard produces this — defrule r(...) when <guard> do — and so do
guards lifted out of a condition, when they only reference variables bound upstream.
:bind is what the guard reads, not what it introduces.
Summary
Types
@type t() :: %Rete.IR.Test{ __ast__: %{guard: Macro.t(), bind: %{required(atom()) => Macro.t()}} | nil, bind: [atom()], expr: Rete.IR.Expr.t() }