`include TraceElem.Kind`
`type t`````
`include sig ... end`
`val compare : t ‑> t ‑> int`
`val matches : caller:t ‑> callee:t ‑> bool`

Return true if the `caller` element kind matches the `callee` element kind. Used during trace expansion; we will only consider expanding the trace from caller into callee if this evaluates to true. This can normally just be `equal`, but something fuzzier may be required if `t` is a type that contains identifiers from the caller/callee

`val pp : InferModules.TraceElem.F.formatter ‑> t ‑> unit`
`val get : InferIR.Typ.Procname.t ‑> InferIR.HilExp.t list ‑> InferIR.Tenv.t ‑> (t * int option) option`

return Some (kind) if the procedure with the given actuals is a taint source, None otherwise

`val get_tainted_formals : InferIR.Procdesc.t ‑> InferIR.Tenv.t ‑> (InferIR.Mangled.t * InferIR.Typ.t * t option) list`

return each formal of the function paired with either Some(kind) if the formal is a taint source, or None if the formal is not a taint source