Library deprecation (was: RE: monad library)

Simon Marlow
Wed, 30 Jul 2003 10:34:25 +0100

Malcolm Wallace writes:
> ... so the question here
> is really about the process for deprecating one existing API and
> replacing it with a new API.  I don't have a solution to this issue.
> However, it is clear that allocating a new namespace every time an
> API is improved, is a recipe for confusion amongst users when they
> search for "the" API without a knowledge of the social history.


It seems to me that we do need a way to have multiple versions of an API
available, however.  We can do this two ways:

 1. Use a top-level name 'Old', for old versions of libraries.  The
    contents of Old would mirror the top-level hierarchy, so eg.
    Old.Control.Monad would be the previous version of the Control.Monad
    library.  This extends nicely to allowing even older versions:
    Old.Old.Control.Monad :-)

 2. Use a suffix instead.  For example, Control.Monad.Old would be
    the previous version, and would import Control.Monad.Trans.Old, etc.

(1) means you can retain the structure of the original hierarchy inside
Old, and different versions of APIs are completely separate.  (2) means
less moving around of source files.  On balance, think I prefer (1).