-
MultilineStrings -
- Начиная с:
-
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" | Используйте |