Small bidirectional typing nucleus for Rusty-Elixir lowering.
This module intentionally starts as an explicit, side-effect-free companion to
RustQ.Meta.Lower: callers pass an %Env{} instead of relying on the
lowerer's process dictionary. The lowerer can migrate individual positions to
synth/2 and check/3 over time.
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