val write_files : string ->(string * string) list-> unit
val cache_root : unit ->string option
val fresh_dir : name:string ->(string * string) list-> string
val dir : name:string ->(string * string) list-> string
dir ~name files returns a directory that contains files (relative path, contents). The directory is created on first use, in the user's cache directory, under a name that depends on the contents.