# `ExDatalog.Engine`
[🔗](https://github.com/thanos/ex_datalog/blob/v0.5.0/lib/ex_datalog/engine.ex#L1)

Behaviour for pluggable Datalog evaluation backends.

An engine takes a compiled IR program and evaluation options, then produces
a result containing all derived facts. The default engine is
`ExDatalog.Engine.Naive`, which implements semi-naive fixpoint evaluation.

# `ir`

```elixir
@type ir() :: ExDatalog.IR.t()
```

# `opts`

```elixir
@type opts() :: keyword()
```

# `reply`

```elixir
@type reply() :: {:ok, ExDatalog.Knowledge.t()} | {:error, term()}
```

# `evaluate`

```elixir
@callback evaluate(ir(), opts()) :: reply()
```

# `name`

```elixir
@callback name() :: String.t()
```

---

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