module Data.Strings.ISO88591Normalize where import Data.Char import Data.Map (Map) import qualified Data.Map as M -- | Normalize the string. normalize :: String -> String normalize = concat . map replace where replace c = maybe [c] restoreCase $ M.lookup (toLower c) mapping where restoreCase | isUpper c = map toUpper | otherwise = id -- | Mapping that will be normalized. mapping :: Map Char String mapping = foldr (\(to,froms) m -> foldr (`M.insert` to) m froms) M.empty [("D",['Ð']) ,("o",['ð','ò','ó','ô','õ','ö','ø','ō']) ,("ss",['ß']) ,("a",['à','á','â','ã','ä','å']) ,("ae",['æ']) ,("c",['ç']) ,("e",['è','é','ê','ë']) ,("i",['ì','í','î','ï']) ,("n",['ñ']) ,("u",['ù','ú','û','ü']) ,("y",['ý','ÿ'])]