When upgrading to GHC 6.10, any of your packages that worked against
the base-3 library will continue to work (unless you define instances of the Arrow class: see below). GHC 6.10 provides both the old
base-3 library and the new base-4.

To ensure your old code continues to work, you can have the code compile
and link against base-3, and then, over time, migrate code to the base-4
series.

1 Adding base-3 constraints

How to do this depends on how you build your Haskell code. We'll start
with the most simplistic build mechanisms. cabal-install, the most
sophisticated tool, will sort this all out for you anyway, so things
should change.

1.1 ghc --make

Force use of package base-3 when using --make,

ghc --make -package base-3.0.3.0

1.2 runhaskell

If you build your packages with the 'runhaskell Setup.hs configure'
method, then you can force the use of base-3,

--constraint="base<4"

1.3 cabal-install

It is worth upgrading cabal-install immediately (maybe before installing
GHC). This way you can use the smart dependency solver to work out what
to install for you.

Each of these has a standard way to solve the problem. Techniques should be attached here.

2.1 Arrow instances

The relevant change is essentially that Arrow became a subclass of Category. To be exact:

(.) is a new function, in Category. (>>>) was removed from Arrow and made a function.

id is a new function, in Category

The base-3 compatibility package contains the same classes as base-4, so it will not save you if you define instances of the Arrow class: you'll need to change your code.
Whenever you define an instance of Arrow you must also define an instance of Category, as follows: