a5c3f3da0439450cf4a3b98b2832e54e0a99c5a1
This commit introduces bidirectional type inference, enabling the compiler to infer lambda parameter types based on the context of their usage. This is particularly useful for functions like `pipe`, where a lambda's signature can be deduced from the types of the streams it operates on. Key changes include: - **`extract_lambda_param_hints` function:** This new helper function in `type_checker.rs` is responsible for extracting expected parameter types for a lambda based on the callee's signature and already known argument types. - **`check_lambda_with_param_hints` function:** This function allows type-checking a lambda node using provided parameter type hints, preserving upvalue types from the enclosing scope. - **Call expression type checking:** The `check_call` function now phases its argument type checking. Non-lambda arguments are typed first, and then lambda arguments are typed using hints derived from `extract_lambda_param_hints`. - **`pipe_arg_hint_resolver`:** This new resolver for the `pipe` function's `PolymorphicFn` type allows it to provide specific type hints for its lambda argument based on the types of its stream inputs (single stream, vector of streams, or tuple of streams). - **`StaticType::PolymorphicFn` update:** The `PolymorphicFn` enum variant has been extended to include `resolve_arg_hints`, enabling functions to provide lambda parameter hints during bidirectional type inference. - **New tests:** Added tests to verify the correct inference of lambda parameters for `pipe` with vector and tuple inputs, ensuring that inner stream types are correctly propagated. Also, a test to confirm `pipe` with an optional return still produces `Stream(Float)`.
Description
No description provided
Languages
Rust
100%