Библиотека split - это то, что вам нужно.Установите с cabal install split
, тогда у вас будет доступ ко многим функциям в стиле split / tokenizer.
Некоторые примеры из библиотеки:
> import Data.List.Split
> splitOn "x" "axbxc"
["a","b","c"]
> splitOn "x" "axbxcx"
["a","b","c",""]
> endBy ";" "foo;bar;baz;"
["foo","bar","baz"]
> splitWhen (<0) [1,3,-4,5,7,-9,0,2]
[[1,3],[5,7],[0,2]]
> splitOneOf ";.," "foo,bar;baz.glurk"
["foo","bar","baz","glurk"]
> splitEvery 3 ['a'..'z']
["abc","def","ghi","jkl","mno","pqr","stu","vwx","yz"]
Функция wordsBy
из той же библиотеки является обобщенной версией words
, как вы и хотели:
wordsBy (=='x') "dogxxxcatxbirdxx" == ["dog","cat","bird"]