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