12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061moduleDiff=structtype'at={diff:'a}[@@unboxed]endtype'at='aDiff.toptionletnone=Nonelet[@inline]returndiff=Some{Diff.diff}let[@inline]mapt~f=matchtwith|Some{Diff.diff}->Some{Diff.diff=(f[@inlinedhint])diff}|None->None;;let[@inline]bindt~f=matchtwith|Some{Diff.diff}->(f[@inlinedhint])diff|None->None;;letboth=`both_would_allocate__use_bind_insteadlet[@inline](>>|)xf=mapx~flet[@inline](>>=)xf=bindx~fmoduleOptional_syntax=structmoduleOptional_syntax=structlet[@inline]is_nonet=matchtwith|None->true|Some_->false;;let[@inline]unsafe_valuet=matchtwith|Some{Diff.diff}->diff|None->failwith"[Optional_diff.unsafe_value] called on [Optional_diff.none]";;endendincludeOptional_syntax.Optional_syntaxlet[@inline]to_optiont=matchtwith|None->None|Some{Diff.diff}->Somediff;;moduleLet_syntax=structletreturn=returnmoduleLet_syntax=structletreturn=returnletmap=mapletbind=bindletboth=bothmoduleOpen_on_rhs=structendendend