We extend the flattening transformation, which turns nested into flat data parallelism, to the full higher-order case, including lambda abstractions and data parallel
arrays of functions. Our central observation is that flattening needs to transform the closures used to represent functional
values. Thus, we use closure conversion before flattening and introduce array closures to represent arrays of functional values.
Partly funded by the Australian Research Council under grant number DP0211203.