Improved Easy_domain, with boolean env vars
[hcoop/domtool2.git] / src / tycheck.sml
index f68100f..d5b3f1e 100644 (file)
@@ -574,8 +574,6 @@ fun checkExp G (eAll as (e, loc)) =
 
          | EIf (e1, e2, e3) =>
            let
-               val t = (newUnif (), loc)
-
                val t1 = checkExp G e1
                val t2 = checkExp G e2
                val t3 = checkExp G e3
@@ -583,20 +581,21 @@ fun checkExp G (eAll as (e, loc)) =
            in
                (subTyp (t1, bool))
                handle Unify ue =>
-                      dte (WrongType ("\"If\" test",
+                      dte (WrongType ("\"if\" test",
                                       e1,
                                       t1,
                                       bool,
                                       SOME ue));
-               subTyp (t2, t);
-               (subTyp (t3, t))
-               handle Unify ue =>
-                      dte (WrongType ("\"Else\" case",
-                                      eAll,
-                                      t3,
-                                      t2,
-                                      SOME ue));
-               t
+               (subTyp (t2, t3); t3)
+                      handle Unify _ =>
+                             ((subTyp (t3, t2); t2)
+                              handle Unify ue =>
+                                     (dte (WrongType ("\"else\" case",
+                                                      eAll,
+                                                      t3,
+                                                      t2,
+                                                      SOME ue));
+                                      (TError, loc)))
            end
     end