12345678910111213141516171819202122232425262728293031323334open!Coreopen!Importtypet=|Realof{real_name:string;alt_name:stringoption}|Fakeofstring[@@derivingcompare,equal]letreal_name_exn=function|Real{real_name;alt_name=_}->real_name|Fake_->raise_s[%message"File_name.real_name_exn got a fake file"];;letdisplay_name=function|Real{real_name;alt_name}->Option.valuealt_name~default:real_name|Fakename->name;;letto_string_hum=display_nameletappendtpart=matchtwith|Real{real_name;alt_name}->Real{real_name=Filename.concatreal_namepart;alt_name=Option.mapalt_name~f:(funname->Filename.concatnamepart)}|Fakename->Fake(Filename.concatnamepart);;letdev_null=Real{real_name="/dev/null";alt_name=None}