\section{Extensions}
In this section, we will present some extensions to the partitioning
algorithms and remove some of the restrictions we placed on the
language and input blocks.

The first point to note that the ``disconnection'' operation of
used in algorithm 4 is very general -- it could be applied to a node
of any type. Using this, our strategy for dealing with cyclic blocks
are as follows: find a {\em feedback vertex set} $V$ in $b$. The feedback
vertex set $V$ has the property that the graph formed
by removing the vertices in $V$ is acyclic. Form the block $b'$ 
by disconnecting nodes in $V$. Now, partition the acyclic block $b'$
to generate partititions of the block $b'$. 

A similar approach can be used to deal with higher order functions
and data structures. However, it is possible to extend paths
to analyze simple data structures like tuples \cite{Coorg94} and the
results of this analysis can be used in the partitioning algorithm.

A nontrivial extension of the partitioning algorithm is to incorporate
{\em context} information during partitioning. The idea behind this is
simple: in many cases, one can deduce that a function is always being
used in a strict manner and this information can be used to generate
better partitions for the the function. 





