12345678910111213141516171819202122openCore_kernelopenDeferred_stdmoduleDeferred=Deferred1letreraise=function|Okx->x|Errorexn->Exn.reraiseexn"caught exception in memoized function";;letgeneral(typea)(hashable:(moduleHashable.S_plainwithtypet=a))f=letmoduleHashable=(valhashable)inletf=Memo.general~hashable:Hashable.hashable(funa->Monitor.try_with~run:`Now(fun()->fa))inStaged.stage(funa->fa>>|reraise);;letunitf=letf=Memo.unit(fun()->Monitor.try_with~run:`Nowf)inStaged.stage(fun()->f()>>|reraise);;