We present a heuristic, transformational approach for the
static analysis and optimization of functional programs. Our
motivation is to increase the acceptance of functional programming
for parallelization in the community of high-performance computing.
Functional programming simplifies dependence analysis in the
parallelization and provides high-level constructs
for specifying parallel operations on shared data structures.
We concentrate on optimizing transformations involving the list data
structure. The transformations are based on knowledge about the
lengths of lists, which has to be inferred by the compiler.
Lengths are represented by symbolic expressions in terms of a few
structural parameters, i.e., placeholders for significant run-time
parameters like the size of the input.