getopt-generics-0.11: src/WithCli/Normalize.hs
module WithCli.Normalize (
normalize,
matches,
) where
import Data.Char
matches :: String -> String -> Bool
matches a b =
normalize a == normalize b
normalize :: String -> String
normalize s =
if all (not . isAllowedChar) s
then s
else
slugify $
dropWhile (== '-') $
filter isAllowedChar $
map (\ c -> if c == '_' then '-' else c) $
s
where
slugify (a : r)
| isUpper a = slugify (toLower a : r)
slugify (a : b : r)
| isUpper b = a : '-' : slugify (toLower b : r)
| otherwise = a : slugify (b : r)
slugify x = x
isAllowedChar :: Char -> Bool
isAllowedChar c = (isAscii c && isAlphaNum c) || (c `elem` "-_")