123456789101112131415161718192021222324openCore_kerneltype'at='a(* This [Obj.magic] is OK because we never allow user code access to [none] (except via
[unsafe_value]. [Uopt] is used only internally in [Incremental_lib]. And we never
have an [_ Uopt.t Uopt.t], so there is no chance of confusing [none] with [some
none]. And we never build [float Uopt.t array]s. *)letnone="Uopt.none"|>(Obj.magic:string->_t)letis_nonet=phys_equaltnoneletis_somet=not(is_nonet)letinvariantinvariant_at=ifis_somettheninvariant_atletsexp_of_tsexp_of_at=ifis_nonetthen[%sexpNone]else[%sexpSome(t:a)]letsomea=aletvalue_exnt=ifis_nonetthenfailwith"Uopt.value_exn"elsetletunsafe_valuet=tlet%test_=is_nonenonelet%test_=not(is_somenone)let%test_=not(is_none(some13))let%test_=is_some(some13)let%test_=Exn.does_raise(fun()->value_exnnone)let%test_=value_exn(some13)=13let%test_=unsafe_value(some13)=13