Synthesizes the type of a Rusty-Elixir expression and checks one against an expected type,
deciding the coercion lowering applies: propagating with ?, wrapping in Some, borrowing,
dereferencing, or none.
Summary
Types
@type env_source() :: RustQ.Meta.Typing.Env.t() | keyword()
Functions
@spec check(Macro.t(), RustQ.Meta.Type.t(), env_source()) :: RustQ.Meta.Typing.Check.t()
@spec env(keyword()) :: RustQ.Meta.Typing.Env.t()
@spec expected_for_let(Macro.t(), Macro.t(), env_source()) :: RustQ.Meta.Type.t() | nil
@spec infer_downstream_let_types([Macro.t()], env_source(), map()) :: %{ optional(atom()) => RustQ.Meta.Type.t() }
@spec struct_field_type(RustQ.Meta.Type.t(), atom()) :: RustQ.Meta.Type.t() | nil
@spec synth(Macro.t(), env_source()) :: RustQ.Meta.Type.t() | nil