diff --git a/haskell/9_title_case.hs b/haskell/9_title_case.hs index 4f369f6..9928600 100644 --- a/haskell/9_title_case.hs +++ b/haskell/9_title_case.hs @@ -3,24 +3,23 @@ module TitleCase (titleCase) where import qualified Data.Char as Char titleCase :: String -> String -> String -titleCase minor title = - unwords $ - map toTitle (take 1 titleWords) - <> map maybeToTitle (drop 1 titleWords) +titleCase minor = unwords . process . words . toLower where - titleWords, minorWords :: [String] - titleWords = words . toLower $ title - minorWords = words . toLower $ minor + process :: [String] -> [String] + process [] = [] + process (head:tail) = toTitle head : map maybeToTitle tail + + lowerMinorWords :: [String] + lowerMinorWords = words $ toLower minor maybeToTitle :: String -> String maybeToTitle word - | word `elem` minorWords = word - | otherwise = toTitle word + | word `elem` lowerMinorWords = word + | otherwise = toTitle word toTitle :: String -> String -toTitle t = case t of - "" -> "" - (x:xs) -> Char.toUpper x : xs +toTitle [] = [] +toTitle (head:tail) = Char.toUpper head : toLower tail toLower :: String -> String toLower = map Char.toLower