diff --git a/compiler/src/typed/typepat.re b/compiler/src/typed/typepat.re index f7f1f50aa..cb2d2f304 100644 --- a/compiler/src/typed/typepat.re +++ b/compiler/src/typed/typepat.re @@ -819,10 +819,12 @@ and type_pat_aux = ([{ppat_desc: desc, ppat_loc: loc}], true); }; let opath = - /*try - let (p0, p, _) = extract_concrete_variant !env expected_ty in - Some (p0, p, true) - with Not_found ->*/ None; + try({ + let (p0, p, _) = extract_concrete_variant(env^, expected_ty); + Some((p0, p, true)); + }) { + | Not_found => None + }; let candidates = switch (lid.txt, constrs) { diff --git a/compiler/test/suites/types.re b/compiler/test/suites/types.re index c3aa4acc4..0776ebfc6 100644 --- a/compiler/test/suites/types.re +++ b/compiler/test/suites/types.re @@ -199,6 +199,26 @@ describe("aliased types", ({test, testSkip}) => { |}, "expression was expected of type Aliases.Foo = Number", ); + assertRun( + "disambiguation_enum_1", + {| + enum A { V } + enum B { V } + let f = x => match (x) { V: A => print(true) } + f(V) + |}, + "true\n", + ); + assertRun( + "disambiguation_record_1", + {| + record A { v: Number } + record B { v: Number } + let f = x => match (x) { { v }: A => print(v) } + f({v: 5}) + |}, + "5\n", + ); assertRun( "regression_annotated_type_func_1", {|