| Dataflow analysis and transformation of control-flow graphs is
pervasive in optimizing compilers, but it is typically tightly
interwoven with the details of a particular  [more]Dataflow analysis and transformation of control-flow graphs is
pervasive in optimizing compilers, but it is typically tightly
interwoven with the details of a particular compiler.  We describe
Hoopl, a reusable Haskell library that makes it unusually easy 
to define new analyses and transformations for *any* compiler.  Hoopl's
interface is modular and polymorphic, and it offers unusually strong
static guarantees.  The implementation is also far from routine: it
encapsulates state-of-the-art algorithms (interleaved analysis and
rewriting, dynamic error isolation), and it cleanly separates their
tricky elements so that they can be understood independently. |  | compilation  components and composition |