# `CEL.Expr.Call`
[🔗](https://github.com/hansihe/pb_ex/blob/v0.2.0/cel_ex/lib/cel/expr.ex#L97)

A function call, `f(args)` or `target.f(args)`.

`function` is the name as written, or for a namespaced function such as
`math.greatest(...)`, with its namespace; `target` is the receiver of a
method call and `nil` otherwise.

Operators are calls too, with CEL's internal names: `_+_`, `_==_`, `!_`,
`-_`, `_&&_`, `_||_`, `_?_:_`, `_[_]`, `_[?_]`, `@in`, .... So is an enum
constructor such as `pkg.Enum(1)`, with `function` the enum's full name
and `overload_id` `"enum_constructor"`.

`overload_id` is the overload the checker chose, such as `"add_int64"`.
When that depends on types known only when evaluating, it names the
dispatch instead, such as `"_+__dyn"` for `dyn_value + 1`.

# `t`

```elixir
@type t() :: %CEL.Expr.Call{
  args: [CEL.Expr.t()],
  function: String.t(),
  id: CEL.Checked.expr_id(),
  overload_id: String.t(),
  target: CEL.Expr.t() | nil,
  type: CEL.Expr.type()
}
```

---

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