\$\begingroup\$
\$\endgroup\$
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> words "hey these are the words in this sentence" ["hey","these","are","the","words","in","this","sentence"] ghci> words "hey these are the words in this\nsentence" ["hey","these","are","the","words","in","this","sentence"]
Please critique my implementation.
words' :: String -> [String]
words' [] = []
words' xxs@(x:xs)
| x == ' ' = words' xs
| otherwise = ys : words' rest
where (ys, rest) = break (== ' ') xxs
200_success
145k22 gold badges190 silver badges478 bronze badges
asked May 14, 2014 at 0:53
1 Answer 1
\$\begingroup\$
\$\endgroup\$
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 -> words x == words' x) ["", " ", "a", "a ", " a", "a b", "aa bb", "aa\nbb", "a b\nc\td"]
answered May 14, 2014 at 2:06
lang-hs