Haskell string tokenizer function

Мне нужен токенизатор строк в 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 более универсальной, чтобы справиться с этим? Я пробовал искать такую функцию, но не нашел...

Есть ли более простой способ для этого или "токенизация" строки не является очень частой проблемой? :)

9
задан hammar 25 November 2011 в 04:58
поделиться