123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869openStdunetypet=Aofstring[@@unboxed]letto_dyn(As)=letopenDyn.Encoderinconstr"A"[strings]letequal(Aa)(Ab)=String.equalabletis_valid=letrecloopsilen=i=len||matchString.unsafe_getsiwith|'%'->after_percents(i+1)len|'"'|'('|')'|';'|'\000'..'\032'|'\127'..'\255'->false|_->loops(i+1)lenandafter_percentsilen=i=len||matchString.unsafe_getsiwith|'%'->after_percents(i+1)len|'"'|'('|')'|';'|'\000'..'\032'|'\127'..'\255'|'{'->false|_->loops(i+1)leninfuns->letlen=String.lengthsinlen>0&&loops0lenletof_strings=Asletto_string(As)=sletparses=ifis_validsthenSome(As)elseNoneletprint(As)=ifis_validsthenselseCode_error.raise"atom cannot be printed in dune syntax"[("atom",Strings)]letof_inti=of_string(string_of_inti)letof_floatx=of_string(string_of_floatx)letof_boolx=of_string(string_of_boolx)letof_digestd=of_string(Digest.to_stringd)letof_int64i=of_string(Int64.to_stringi)