Мне нужен токенизатор строк в Haskell, но видимо ничего уже не определено в Prelude или других модулях. Есть splitOn в Data.Text, но его трудно использовать, потому что нужно обернуть String в Text.
Токенизатор не так уж сложно сделать, поэтому я написал один (он не обрабатывает несколько смежных разделителей, но он хорошо работает для того, что мне было нужно). Мне кажется, что нечто подобное уже должно быть где-то в модулях...
Это моя версия
tokenizer :: Char -> String -> [String]
tokenizer delim str = tokHelper delim str []
tokHelper :: Char -> String -> [String] -> [String]
tokHelper d s acc
| null pos = reverse (pre:acc)
| otherwise = tokenizer d (tail pos) (pre:acc)
where (pre, pos) = span (/=d) s
Я искал в интернете другие решения и нашел несколько обсуждений, например это сообщение в блоге.
Последний комментарий (автор Mahee от 10 июня 2011 года) особенно интересен. Почему бы не сделать версию функции words более универсальной, чтобы справиться с этим? Я пробовал искать такую функцию, но не нашел...
Есть ли более простой способ для этого или "токенизация" строки не является очень частой проблемой? :)