module IntWrapper = Univ.Embed(Int) module StringWrapper = Univ.Embed(String) let and_null = Hashtbl.create 16 let or_watt = Hashtbl.create 16 let name = StringWrapper.new_property () let age = IntWrapper.new_property () let money = IntWrapper.new_property () let get t (set, get) = get t let set t (set, get) x = set t x let () = set and_null name "and Null" let () = set and_null age 28 let () = set and_null money 20 let () = set or_watt name "or Watt" let () = set or_watt age 28 let () = set or_watt money 100 let () = match get and_null money, get or_watt money with | Some m, Some n when m < n -> print_endline "and has more moneny than or." | Some m, Some n when n > m -> print_endline "or has more money than and." | Some _, Some _ -> print_endline "They have the same amount of money." | None, None -> print_endline "They broke AF." | (None, _) -> print_endline "and has no money :<" | (_, None) -> print_endline "or has no money :<"