Haskell - Всегда ли экранировать буквальную обратную косую черту в строке? - PullRequest
9 голосов
/ 25 сентября 2010

В Haskell, чтобы представить буквальную строку "\", обычно пишут:

"\\"

Однако есть ли способ экранировать строку, так что один обратный слеш может быть записан с помощьюсамо по себе без необходимости сбежать?Например, я могу сделать именно это в C #, предварительно ожидая @ в строке:

@"\"

Есть ли на Haskell эквивалент?

Ответы [ 3 ]

5 голосов
/ 25 сентября 2010

Нет, см. Раздел 2.6 Лексическая структура Haskell .

В Haskell нет необработанных строк, heredocs или тройных строк. Сожалею. Единственное, что вы получите, это:

  "ab\
  \cd"

=> 

"abcd"

Пробел между косой чертой в конце строки и в начале игнорируется. Это полезно, например, если вы хотите испустить некоторый встроенный HTML, который имеет правильные отступы в исходном тексте на Haskell, но не чрезмерно отступает в выходных данных. (Не то чтобы я рекомендовал делать сложный вывод HTML таким способом.)

3 голосов
/ 17 февраля 2017

Есть хорошая библиотека (raw-strings-qq) , которая дает вам QuasiQouter

import Text.RawString.QQ

multiline :: String
multiline = [r|<HTML>
<HEAD>
<TITLE>Auto-generated html formated source</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
</HEAD>
<BODY LINK="800080" BGCOLOR="#ffffff">
<P> </P>
<PRE>|]
2 голосов
/ 16 апреля 2013

Это возможно при использовании стандартного haskell, благодаря механизму QuasiQuoting:

http://www.haskell.org/haskellwiki/Poor_man%27s_here_document#Quasiquoting

Таким образом, проблем больше нет. Единственная проблема заключается в том, что теперь вы должны быть осторожны с |], который завершает последовательность квазицитирования и что вам, возможно, придется бежать. В контексте регулярных выражений я сам избежал этого, используя \ u7c] или что-то в этом роде, я точно не помню. Поэтому я использовал Unicode или ASCII-код для символа канала. Но эта последовательность |] встречается не часто.

И если вам интересно вводить регулярные выражения, я большой поклонник библиотеки Rex:

http://hackage.haskell.org/package/rex

Который не только использует квазицитирование для правильного ввода регулярных выражений (без двойной обратной косой черты), он также использует perl-подобные регулярные выражения, а не раздражающие регулярные выражения POSIX по умолчанию, и даже позволяет использовать регулярные выражения в качестве шаблона, соответствующего параметрам вашего метода, который гений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...