-
MultilineStrings -
- Since:
-
9.12.1
Включить многострочные строковые литералы.
С этим расширением GHC теперь распознаёт многострочные строковые литералы с разделителями """. Отступы автоматически удаляются, и они преобразуются в обычные строковые литералы, поэтому они работают как ожидается для OverloadedStrings и любой другой функциональности. Отступ, который удаляется, можно неофициально определить как «самый длинный префикс пробелов, общий для всех строк в строке, за исключением первой строки и всех строк, содержащих только пробелы».
Обычные строковые литералы распознаются, затем пробелы в строках сворачиваются, затем обрабатываются escape-символы. Многострочные строковые литералы добавляют следующие этапы пост-обработки между сворачиванием пробелов в строке и обработкой escape-символов:
-
Разбить строку по символам новой строки
- Включает
\r\n,\r,\n,\f
- Включает
- Заменить ведущие табуляции пробелами до следующей позиции табуляции
- Удалить общий префикс пробелов в каждой строке
- Если строка содержит только пробелы, удалить все пробелы
- Объединить строку обратно с разделителями
\n - Если первый символ строки
\n, удалить его - Если последний символ строки
\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" | Использовать |