module Data.Strings.ISO88591Normalize where
import Data.Char
import Data.Map (Map)
import qualified Data.Map as M
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 :: 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",['ý','ÿ'])]