12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758open!Core_kernelopen!Import0include(String:sigtypet=string[@@derivingsexp_of]includeComparable.Swithtypet:=twithtypecomparator_witness=String.comparator_witnessincludeHashable.Swithtypet:=tend)lettype_=Value.Type.(map_idstring)[%message"filename"]lett=type_letof_value_exn=Value.Type.of_value_exntype_letto_value=Value.Type.to_valuetype_letis_absolute=Funcall.("file-name-absolute-p"<:t@->returnbool)letextension=Funcall.("file-name-extension"<:t@->return(nil_orstring))letextension_exnt=matchextensiontwith|Somex->x|None->raise_s[%message"Filename.extension_exn"~_:(t:t)];;letnondirectory=Funcall.("file-name-nondirectory"<:t@->returnstring)letof_directory=Funcall.("directory-file-name"<:string@->returnstring)letsans_extension=Funcall.("file-name-sans-extension"<:t@->returnstring)letto_directory=Funcall.("file-name-as-directory"<:t@->returnstring)letdirectory=Funcall.("file-name-directory"<:t@->return(nil_orstring))letdirectory_exnt=matchdirectorytwith|Somet->t|None->raise_s[%message"[Filename.directory_exn] of filename that has no directory"~filename:(t:t)];;letfile_relative_name=Funcall.("file-relative-name"<:t@->t@->returnt)letmake_relativet~relative_to=file_relative_nametrelative_toletexpand_file_name=Funcall.("expand-file-name"<:t@->t@->returnt)letexpandt~in_dir=expand_file_nametin_dirlettemporary_file_directory=lettemporary_file_directory="temporary-file-directory"inletfuncall=Funcall.(temporary_file_directory<:nullary@->returnt)inletvariable=Var.Wrap.(temporary_file_directory<:t)infun()->ifSymbol.function_is_defined(Symbol.interntemporary_file_directory)thenfuncall()elseCurrent_buffer0.value_exnvariable;;