GENERAL
-------

* [Compiler-errs] Comprehensively catch and handle exceptions thrown by the compiler library; do so modularly.
* [Logging] Implement a proper logging framework.
* [Libs] Modularise treatment of libraries; this involves the following:
  - Mapping source file names to compiled file names.
    (e.g. in JS, array.ml in base library is compiled to base__Array.cm[*], but base.ml compiled normally to base.cm[*])
  - Mapping identifiers to paths.
    (e.g. in JS, for Array0.fold in base library, lookup of Array.fold results in a path Base__.Array.fold which normalizes to Base__Array.fold, but underlying module Base__Array is hidden so a lookup of Base__Array.fold will fail).
* [Repr] Implement a general way of representing refactorings.
* [Refactor-deps] Implement a framework for handling refactoring dependencies.
  (requires [Repr])
* [Ghost] Figure out how to correctly (or at least robustly) determine when elements in the AST correspond to actual source code, and which are ghost elements.
* [Findlib] Integrate findlib to lookup package locations
* [Compiler-deps] Use the .depends compiler-generated files to run refactorings over a minmial set of files.
  (Also use other automatically generated dependency files, e.g. make's .d files?)
  (Or integrate ocamldep to do this "in-house"?)

DEPENDENCIES
------------

* Update to use new release of Visitors package, with polymorphic=true parameter.

REFACTORINGS
------------

* [Rename/val] Finish renaming of values:
  - check pre-condition that renaming does not shadow a value in the module where the value is defined.
  - identify/generate (and apply?) correct dependencies.
  - handle functors?
  - remember the "module type of" construction!

WISHLIST
--------

* [Rename] Other kinds of renaming:
    [/type] Rename a type.
    [/constructor] Rename a constructor in a variant type.
    [/field] Rename a field in a record type.
    [/fun-param] Rename a function parameter.
    [/fun-param-label] Rename the label of a function parameter.

* [Move] Move elements from one module to another.
    [/val] Move a value.
    [/type] Move a type.

* [Transform] Transformations.
    [/type] Transformations on types.