Каков наилучший способ хранения строк регулярных выражений в Haskell?

#regex #haskell #coding-style

#регулярное выражение #haskell #стиль кодирования

Вопрос:

У меня есть функция remove , которая принимает регулярное выражение в виде строки и другой строки. Он удаляет все, что соответствует регулярному выражению, из второй строки и возвращает его.

На данный момент я вызываю remove функцию с буквальными строками регулярных выражений, например:

 remove "(my|a)?string" "Test string" -- returns "Test "
  

Эта программа будет расти, и будет вызывать множество регулярных выражений, и каждое из них может использоваться несколько раз в программе. Должен ли я хранить их так:

 myregex = "(my|a)?string"
  

или я должен создавать тип данных или что-то еще?

Спасибо

Ответ №1:

Одним из вариантов было бы использовать частичное приложение, как в:

 remove regex str = <generic code to remove the regex expression from string>
  

Для каждого конкретного типа регулярных выражений, которые вы хотите применить, вы можете написать функцию типа:

 removeName = remove "<name_regex>"
  

и так далее. Затем вы можете использовать такие функции, как

 removeName "myname"
  

Ответ №2:

Если производительность вызывает беспокойство, любое регулярное выражение, которое вы собираетесь использовать несколько раз, должно быть скомпилировано один раз и сохранено в скомпилированном виде. Смотрите также Документацию для makeRegex.