テキストファイルから入力を受け付ける時にはよく使う。あとはカンマ区切りなんかも。
import Data.Char
splitBy :: (a -> Bool) -> [a] -> [[a]]
splitBy p [] = []
splitBy p xs = a : (splitBy p $ dropWhile p $ b)
  where
    (a, b) = break p xs
splitBySpace :: String -> [String]
splitBySpace = splitBy isSpace
*Main> splitBySpace "a b c" ["a","b","c"] *Main> splitBySpace " a b c " ["","a","b","c"]
正規表現(Text.Regex)を使えばもっとシンプルに書ける。
import Text.Regex splitBySpace' :: String -> [String] splitBySpace' = splitRegex (mkRegex " +")
*Main> splitBySpace' "a b c" ["a","b","c"] *Main> splitBySpace' " a b c " ["","a","b","c",""]
……けど,ちょっと動作が違うな。
ちなみに Ruby の String#split は上の splitBySpace と同じ動作。
D:\>irb --simple-prompt >> "a b c".split(/ +/) => ["a", "b", "c"] >> " a b c ".split(/ +/) => ["", "a", "b", "c"]