1#labels false;; 2type (_,_) eql = Refl : ('a, 'a) eql 3type s = x:int -> y:float -> unit 4type t = y:int -> x:float -> unit 5type silly = {silly: 'a.'a};; 6let eql : (s, t) eql = Refl;; 7[%%expect{| 8type (_, _) eql = Refl : ('a, 'a) eql 9type s = x:int -> y:float -> unit 10type t = y:int -> x:float -> unit 11type silly = { silly : 'a. 'a; } 12val eql : (s, t) eql = Refl 13|}] 14 15#labels true;; 16let f : [`L of (s, t) eql | `R of silly] -> 'a = 17 function `R {silly} -> silly 18;; 19[%%expect{| 20Line _, characters 2-30: 21Warning 8: this pattern-matching is not exhaustive. 22Here is an example of a case that is not matched: 23`L Refl 24val f : [ `L of (s, t) eql | `R of silly ] -> 'a = <fun> 25|}] 26 27(* Segfault: let () = print_endline (f (`L eql)) *) 28