Spec-Zone.ru › Haskell 9

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

MultilineStrings
Начиная с:

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.14.1/docs/users_guide/exts/multiline_strings.html

Spec-Zone.ru

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