12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364openBase(** Uses a [valid] bit to indicate the validity of a [value]. Conceptually similar to an
[Option.t]. *)moduletypeWith_valid=sigtype('a,'b)t2=('a,'b)Comb.with_valid2={valid:'a;value:'b}[@@derivingsexp,bin_io]type'at=('a,'a)t2[@@derivingsexp,bin_io]valvalue:(moduleComb.Swithtypet='a)->'at->default:'a->'avalmap:'at->f:('a->'b)->'btvalmap2:'at->'bt->f:('a->'b->'c)->'ctvaliter:'at->f:('a->unit)->unitvaliter2:'at->'bt->f:('a->'b->unit)->unitvalto_list:'at->'alistvalmap_valid:('a,'b)t2->f:('a->'c)->('c,'b)t2valmap_value:('a,'b)t2->f:('b->'c)->('a,'c)t2(** Create a new hardcaml interface with type ['a With_valid.t X.t] *)moduleFields:sigmoduletypeS=sigtype'avaluetypenonrec'at='atvalueincludeInterface.Swithtype'at:='atvalvalue:(moduleComb.Swithtypet='a)->'at->default:'avalue->'avalueendmoduleMake(X:Interface.Pre):Swithtype'avalue:='aX.tmoduleM(X:T1):sigmoduletypeS=Swithtype'avalue:='aX.tendend(** Create a new hardcaml interface with type [('a, 'a X.t) With_valid.t2]. *)moduleWrap:sigmoduletypeS=sigtype'avaluetypenonrec'at=('a,'avalue)t2includeInterface.Swithtype'at:='atvalvalue:(moduleComb.Swithtypet='a)->'at->default:'avalue->'avalueendmoduleMake(X:Interface.Pre):Swithtype'avalue='aX.tmoduleM(X:T1):sigtypenonrec'at=('a,'aX.t)t2moduletypeS=Swithtype'avalue:='aX.tendendmoduleVector(X:sigvalwidth:intend):Interface.Swithtype'at='atend