123456789101112131415161718192021222324252627282930313233343536373839404142434445464748includeErrorsincludeSexpincludeSexpPatternsmoduleTokenize=TokenizemoduleParse=ParsemoduleMatch=MatchmoduleListConvenienceFunctions =Match.ListConvenienceFunctionsletsexps_of_string(s:string):(sexplist,Parse.parse_error)result=Parse.parse_manysletsexps_of_string_exn(s:string):sexplist=Parse.parse_many_exnsletsexps_of_string_opt(s:string):(sexplist)option=Parse.parse_many_optsletsexp_patterns_of_string(s:string):(sexp_patternlist)option=matchsexps_of_string_optswith|Someses->letpat_opts=List.mapsexp_pattern_of_sexpsesinifList.for_allOption.is_somepat_optsthenSome(List.mapOption.getpat_opts)elseNone|None->Noneletsexp_patterns_of_string_exn(s:string):sexp_patternlist=letses=sexps_of_string_exnsinletpat_opts=List.mapsexp_pattern_of_sexpsesinifList.for_allOption.is_somepat_optsthenList.mapOption.getpat_optselseraise(CamlrackError"failed to convert one or more S-Expressions to S-Expression patterns")letsexp_of_string(s:string):(sexp,Parse.parse_error)result=Parse.parsesletsexp_of_string_exn(s:string):sexp=Parse.parse_exnsletsexp_of_string_opt(s:string):sexpoption=Parse.parse_optsletsexp_pattern_of_string(s:string):sexp_patternoption=matchsexp_of_string_optswith|Somese->sexp_pattern_of_sexpse|None->Noneletsexp_pattern_of_string_exn(s:string):sexp_pattern=matchsexp_pattern_of_sexp(sexp_of_string_exns)with|Somepat->pat|None->raise(CamlrackError"failed to convert S-Expression to S-Expression pattern")letsexp_match(p:sexp_pattern)(se:sexp):bool=Match.sexp_matchpse