diff --git a/crates/ide/src/ty/infer.rs b/crates/ide/src/ty/infer.rs index 55733f0..f146cc3 100644 --- a/crates/ide/src/ty/infer.rs +++ b/crates/ide/src/ty/infer.rs @@ -208,7 +208,8 @@ impl<'db> InferCtx<'db> { self.infer_expr(body) } &Expr::IfThenElse(cond, then, else_) => { - self.infer_expr(cond); + let cond_ty = self.infer_expr(cond); + self.unify_kind(cond_ty, TyKind::Bool); let then_ty = self.infer_expr(then); let else_ty = self.infer_expr(else_); self.unify(then_ty, else_ty); diff --git a/crates/ide/src/ty/tests.rs b/crates/ide/src/ty/tests.rs index 5aecd11..975d67b 100644 --- a/crates/ide/src/ty/tests.rs +++ b/crates/ide/src/ty/tests.rs @@ -102,6 +102,7 @@ fn recursive() { #[test] fn if_then_else() { + check("a: if a then 1 else 1", expect!["bool → int"]); check( "if 1 == 2 then { a = 1; } else { b = 1; }", expect!["{ a: int, b: int }"],