Spec-Zone.ru › Haskell 9

6.9.9. Многострочные строковые литералы

MultilineStrings
Since:

9.12.1

Включить многострочные строковые литералы.

С этим расширением GHC теперь распознаёт многострочные строковые литералы с разделителями """. Отступы автоматически удаляются, и они преобразуются в обычные строковые литералы, поэтому они работают как ожидается для OverloadedStrings и любой другой функциональности. Отступ, который удаляется, можно неофициально определить как «самый длинный префикс пробелов, общий для всех строк в строке, за исключением первой строки и всех строк, содержащих только пробелы».

Обычные строковые литералы распознаются, затем пробелы в строках сворачиваются, затем обрабатываются escape-символы. Многострочные строковые литералы добавляют следующие этапы пост-обработки между сворачиванием пробелов в строке и обработкой escape-символов:

  1. Разбить строку по символам новой строки

    • Включает \r\n, \r, \n, \f
  2. Заменить ведущие табуляции пробелами до следующей позиции табуляции
  3. Удалить общий префикс пробелов в каждой строке
  4. Если строка содержит только пробелы, удалить все пробелы
  5. Объединить строку обратно с разделителями \n
  6. Если первый символ строки \n, удалить его
  7. Если последний символ строки \n, удалить его

6.9.9.1. Примеры

Выражение

Вывод

Примечания

"""
Line 1
Line 2
Line 3
"""
   "Line 1\n"
++ "Line 2\n"
++ "Line 3\n"
"""Test
Line 1
Line 2
Line 3
"""
   "Test\n"
++ "Line 1\n"
++ "Line 2\n"
++ "Line 3\n"

Символы в той же строке, что и разделитель, всё ещё включаются

"""
Line 1
Line 2
Line 3\
\"""
   "Line 1\n"
++ "Line 2\n"
++ "Line 3"

Опустить заключительную новую строку со строковыми пробелами

"""
"Hello"
\"\"\"
\"""
"""
   "\"Hello\"\n"
++ "\"\"\"\n"
++ "\"\"\"\n"

Двойные кавычки не нужно экранировать, если они не тройные

"""
  <div>
    <p>ABC</p>
  </div>
"""
   "<div>\n"
++ "  <p>ABC</p>\n"
++ "</div>\n"

Удаляется только общий отступ

"""
  \&  Line 1
  \&  Line 2
  \&  Line 3
"""
   "  Line 1\n"
++ "  Line 2\n"
++ "  Line 3\n"

Использовать \& для сохранения ведущего отступа для каждой строки

© 2002–2007 The University Court of the University of Glasgow. All rights reserved.
Licensed under the Glasgow Haskell Compiler License.
https://downloads.haskell.org/~ghc/9.12.1/docs/users_guide/exts/multiline_strings.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API