Здесь достаточно регулярных операций со старым списком,
import Data.Char
> [ w | w <- words "one , Two", all isAlpha w ]
["one","Two"]
ака
> filter (all isAlpha) . words $ "one , Two"
["one","Two"]
Список взлома, разбор и оформление
Существует шкала силы и веса при обработке текста. В простейших решениях на основе списков, таких как приведенные выше, предлагают очень мало синтаксического шума для быстрых результатов (в том же духе, что и быстрая и нездоровая обработка текста в сценариях оболочки).
Манипулирование списками может стать довольно сложным, и вы можете рассмотреть, например, обобщенная библиотека split , для разбиения списков на произвольный текст,
> splitOn " , " "one , Two"
["one","Two"]
Для более сложных задач или для кода, который вряд ли будет выброшен, более надежные методы имеют смысл. В частности, вы можете избежать хрупкого сопоставления с образцом, описав проблему как грамматику с помощью комбинаторов синтаксического анализа, таких как parsec или uu-parsinglib . Строковая обработка, описанная с помощью синтаксических анализаторов, имеет тенденцию со временем приводить к более устойчивому коду, поскольку при изменении требований относительно легко модифицировать синтаксические анализаторы, написанные в стиле комбинатора.
Примечание к регулярным выражениям: сопоставление списков и регулярные выражения примерно эквивалентны в простоте использования и (не) безопасности, поэтому для целей этого обсуждения вы можете заменить "регулярное выражение" на "разбиение списка". Синтаксический анализ - почти всегда правильный подход, если код предназначен для длительного использования.