1234567891011121314151617181920212223242526272829303132333435363738394041424344type'aimpl=(moduleS.MEASUREwithtypewitness='a)moduleExt=Ext.Make(structtype'at='aimplend)type'ameasure='aExt.extensiontypewitness=Ext.tletregister:typew.wimpl->wmeasure=fun(moduleM)->(* if Hashtbl.mem labels (M.label ()) then Fmt.invalid_arg "Label %s already
exist, find a new one." (M.label ()) ; *)Ext.inj(moduleM)letinstance:typew.wimpl->wmeasure->witness=fun(moduleM)x->letmoduleExt=(valx)inExt.T(M.make())letload:witness->unit=funv->let(Ext.V(m,(moduleM)))=Ext.prjvinM.loadmletunload:witness->unit=funv->let(Ext.V(m,(moduleM)))=Ext.prjvinM.unloadmletlabel:witness->string=funv->let(Ext.V(m,(moduleM)))=Ext.prjvinM.labelmletunit:witness->string=funv->let(Ext.V(m,(moduleM)))=Ext.prjvinM.unitmtypevalue=Ext.instance=V:'w*'wimpl->valueletprjw=Ext.prjwletrun="run"