Capitalizing a string
head and tail are partial functions, meaning that they are only defined for non-empty lists and will fail on empty ones. Because of this your capWord function is also partial and its strongly considered a bad practice to define such functions. In fact, the head and tail are also considered a bad heritage and in some alternative preludes it's been deliberately decided not to export such functions. So, firstly, you can redefine your function with pattern matching and make it total.

Secondly, you're introducing a redundant list for the first letter, instead you can prepend it using the : (pronounced "cons") operator.

Summing up we get the following definition:

capWord [] = []
capWord (h:t) = toUpper h : map toLower t


Alternatively (essentially the same):

capWord word = case word of
  [] -&gt; []
  (h:t) -&gt; toUpper h : map toLower t


The capitalize function is fine.