Version 5 (modified by john@…, 8 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 pi is a tuple of the variables defined by qualsi and used by e.



add Parallel List comprehensions


  • Easy and well-specified
  • Expresses zips of filters, which are tricky to express with standard list comprehensions which are more suited towards filters of zips.


  • Not widely used, and not hugely more concise than using explicit zips. (this is disputable, there are 142 uses of parallel list comprehensions in the jhc source tree for instance)
  • Naive users can trip over them if they misplace a '|'.
  • 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]]