1234567891011121314151617181920212223242526272829303132open!Importletspellchecknamesname=letcutoff=matchString.lengthnamewith|1|2->0|3|4->1|5|6->2|_->3inlet_,suggestions=List.fold_leftnames~init:(Int.max_value,[])~f:(fun((best_distance,names_at_best_distance)asacc)registered_name->matchOcaml_common.Misc.edit_distancenameregistered_namecutoffwith|None->acc|Somedist->ifdist<best_distancethen(dist,[registered_name])elseifdist>best_distancethenaccelse(dist,registered_name::names_at_best_distance))inmatchList.revsuggestions|>List.filter~f:(String.(<>)name)with|[]->None|last::rev_rest->Some(Printf.sprintf"Hint: Did you mean %s%s%s?"(String.concat~sep:", "(List.revrev_rest))(ifList.is_emptyrev_restthen""else" or ")last);;