Implementing Haskell#words Learn You a Haskell shows the words function.


  words and unwords are for splitting a line of text into words or
  joining a list of words into a text


Example:


ghci&gt; words "hey these are the words in this sentence"
["hey","these","are","the","words","in","this","sentence"]
ghci&gt; words "hey these           are    the words in this\nsentence"
["hey","these","are","the","words","in","this","sentence"]



Please critique my implementation.

words' :: String -&gt; [String]
words' []  = []
words' xxs@(x:xs) 
  | x == ' '  = words' xs
  | otherwise = ys : words' rest
                  where (ys, rest) = break (== ' ') xxs
words treats any whitespace as a separator, not just spaces. Use Data.Char.isSpace.

It's fine otherwise.

When reimplementing the standard library, you can exploit the standard version as a reference implementation to compare your version to:

map (\x -&gt; words x == words' x) ["", "  ", "a", "a ", " a", "a  b", "aa bb", "aa\nbb", "a b\nc\td"]