-
ParallelListComp -
- Since:
-
6.8.1
Разрешить синтаксис параллельных списковых включений.
Параллельные списковые включения — это естественное расширение списковых включений. Списковые включения можно рассматривать как удобный синтаксис для написания функций map и filter. Параллельные списковые включения расширяют это, включив в себя семейство zipWith.
Параллельное списковое включение имеет несколько независимых ветвей списков квалификаторов, разделенных символом |. Например, следующее выполняет сжатие (zip) двух списков:
[ (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) для заданного числа ветвей.