-
ParallelListComp -
- Подразумевается расширением:
- Начиная с:
-
6.8.1
Разрешает синтаксис параллельных списковых включений.
Параллельные списковые включения — естественное расширение списковых включений. Списковые включения можно рассматривать как удобный синтаксис для записи отображений и фильтров. Параллельные включения дополняют их семейством zipWith.
Параллельное списковое включение содержит несколько независимых ветвей списков квалификаторов, разделённых символом |. Например, следующий пример объединяет в пары элементы двух списков:
[ (x, y) | x <- xs | y <- ys ]
Поведение параллельных списковых включений соответствует поведению zip: результирующий список будет иметь ту же длину, что и самая короткая ветвь.
Параллельные списковые включения можно определить с помощью преобразования в обычные включения. Основная идея такова:
Пусть параллельное включение имеет следующий вид:
[ e | p1 <- e11, p2 <- e12, ...
| q1 <- e21, q2 <- e22, ...
...
]
Оно будет преобразовано в:
[ e | ((p1,p2), (q1,q2), ...) <- zipN [(p1,p2) | p1 <- e11, p2 <- e12, ...]
[(q1,q2) | q1 <- e21, q2 <- e22, ...]
...
]
где zipN — подходящий zip для заданного числа ветвей.