;; search did-you-mean / spelling suggestion — Haskell source fragment. ;; Depends on fuzzy (editDist) + index (allTerms). Ranks indexed terms by edit ;; distance to a (possibly misspelled) query term; ties broken alphabetically. ;; suggestN :: Int -> String -> Index -> [Term] ;; suggest :: String -> Index -> Term ("" if the index has no terms) (define search/suggest-src "sgMk term t = (editDist term t, t)\nsgPairs term idx = map (sgMk term) (allTerms idx)\nsgCmp p1 p2 = if fst p1 < fst p2 then LT else if fst p1 > fst p2 then GT else compare (snd p1) (snd p2)\nsuggestN n term idx = take n (map snd (sortBy sgCmp (sgPairs term idx)))\nsgHead [] = \"\"\nsgHead (x:xs) = x\nsuggest term idx = sgHead (suggestN 1 term idx)\n")