# `Runic.Workflow.Rule`
[🔗](https://github.com/zblanco/runic/blob/main/lib/workflow/rule.ex#L1)

# `t`

```elixir
@type t() :: %Runic.Workflow.Rule{
  arity: arity(),
  closure: Runic.Closure.t() | nil,
  condition_hash: integer(),
  condition_refs: [{atom(), integer()}],
  hash: integer(),
  inputs: term(),
  name: String.t(),
  outputs: term(),
  reaction_hash: integer(),
  workflow: Runic.Workflow.t()
}
```

A rule.

The `condition_refs` field carries compile-time condition reference markers
that need to be resolved at connect-time. Each entry is a `{ref_name, target_hash}`
tuple where `target_hash` is the hash of the node (Conjunction or reaction Step)
that the resolved condition should wire to.

# `check`

```elixir
@spec check(t(), any()) :: boolean()
```

Checks a rule's left hand side.

# `new`

# `run`

```elixir
@spec run(t(), any()) :: any()
```

Evaluates a rule, checking its left hand side, then evaluating the right.

---

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