1234567891011121314151617181920212223242526272829303132333435363738394041moduleCallBack=structtypet={trace:string->?extra:string->string->unit;message:lvl:int->message:string->unit;diagnostics:uri:Lang.LUri.File.t->version:int->Lang.Diagnostic.tlist->unit;fileProgress:uri:Lang.LUri.File.t->version:int->Progress.Info.tlist->unit}letdefault={trace=(fun_?extra:__->());message=(fun~lvl:_~message:_->());diagnostics=(fun~uri:_~version:__->());fileProgress=(fun~uri:_~version:__->())}letcb=refdefaultletsett=cb:=tendmoduleLog=structlettraced?extram=!CallBack.cb.traced?extramletfeedbackfeedback=ifnot(CList.is_emptyfeedback)then(* Put feedbacks content here? *)letextra=Nonein!CallBack.cb.trace"feedback"?extra"feedback received in non-user facing place"endmoduleReport=structletmessage~io~lvl~message=io.CallBack.message~lvl~messageletdiagnostics~io~uri~versiond=io.CallBack.diagnostics~uri~versiondletfileProgress~io~uri~versiond=io.CallBack.fileProgress~uri~versiondletperfData~io:_~uri:_~version:__=()end