Version 6 (modified by ross@…, 10 years ago) (diff) |
---|

# Parallel List comprehensions

See ExtensionDescriptionHowto for information on how to write these extension descriptions. Please add any new extensions to the list of HaskellExtensions.

## Brief Explanation

Parallel comprehensions extend list comprehensions with a notation for zips. The comprehension

[ e | quals1 | ... | qualsN ]

can be desugared to

zipWithN (\ p1 ... pN -> e) [p1 | quals1] ... [pN | qualsN]

where `p`_{i} is a tuple of the variables defined by `quals`_{i} and used by `e`.

## References

- Parallel list comprehensions in the GHC User's Guide

## Tickets

- #55
- add Parallel List comprehensions

## Pros

- Easy and well-specified.
- Expresses zips of filters, which are tricky to express with standard list comprehensions.
- Those who use them do so heavily, e.g. there are 142 uses of parallel list comprehensions in the jhc source tree.

## Cons

- Most people do not find them useful, and find the only slightly longer version using explicit zips clearer.
- Naive users can trip over them if they misplace a '
`|`'. - Limited, e.g. cannot express filters of zips, which are more common.
- In its more general forms it's hard to predict how the elements from each set of generators and filters will match up, e.g.
[(i,j,k) | i <- [1..3], j <- [1..3] | k <- [1..9]]