パッケージの削除方法
cabalには,パッケージを削除するための機能は今のところ用意されていません。インストールしたパッケージをGHCから削除したい場合には,まずghc-pkgのunregisterコマンドを使用してパッケージ・データベースから情報を消去する必要があります(参考リンク)。
$ ghc-pkg list ~ 略 ~ C:\Documents and Settings\shelarcy\Application Data\ghc\i386-mingw32-6.12.1\pack age.conf.d: monads-tf-0.0.0.1 transformers-0.1.4.0
$ ghc-pkg unregister monads-tf $ ghc-pkg list ~ 略 ~ C:\Documents and Settings\shelarcy\Application Data\ghc\i386-mingw32-6.12.1\pack age.conf.d: transformers-0.1.4.0
unregisterコマンドを使うことで,パッケージ・データベースからmonads-tfパッケージの情報が削除されたことがわかります。
unregisterコマンドを使って,他のパッケージが利用するパッケージを先に削除しようとした場合には,ghc-pkgは以下のようなエラー・メッセージを出力します。
$ ghc-pkg unregister transformers ghc-pkg: unregistering transformers would break the following packages: monads-t f-0.0.0.1 (use --force to override)
メッセージにあるように,--forceオプションを指定すれば,他で利用するパッケージを先に削除することもできます。
$ ghc-pkg unregister transformers --force unregistering transformers would break the following packages: monads-tf-0.0.0.1 (ignoring)
しかし,--forceを使って無理にパッケージを削除すると,そのパッケージを利用する他のパッケージが壊れてしまいます。複数のパッケージを削除する必要があるのでない限り,無理にパッケージを削除するのはやめましょう。
壊れたパッケージは,ghc-pkgのlistコマンドを使うと,以下のように{ }で囲まれた形で表示されます。
$ ghc-pkg list WARNING: there are broken packages. Run 'ghc-pkg check' for more details. C:/Program Files/Haskell Platform/2010.1.0.0\lib\package.conf.d: ~ 略 ~ C:\Documents and Settings\shelarcy\Application Data\ghc\i386-mingw32-6.12.1\pack age.conf.d: {monads-tf-0.0.0.1}
壊れたパッケージがある場合には,警告メッセージにあるように,ghc-pkgのcheckコマンドを使って壊れた原因を探ることができます(参考リンク)。
$ ghc-pkg check There are problems in package monads-tf-0.0.0.1: dependency "transformers-0.1.4.0-cf8beea8fe76efd8174de1d20be06e27" doesn't exi st The following packages are broken, either because they have a problem listed above, or because they depend on a broken package. monads-tf-0.0.0.1
「transformers-0.1.4.0という依存パッケージがないため,monads-tf-0.0.0.1が壊れた」という情報が表示されています。
なお,ghc-pkgのunregisterコマンドが行うのは,あくまでパッケージ・データベースに対する操作だけです。インストールされたファイルを削除したい場合には,OSのコマンドなどを使って別途削除する必要があります。OSによるファイルの削除は,Haskellのパッケージに限定されているわけではないので,危険を伴います。将来的には,cabalが削除処理を含むパッケージ管理全般を行うようになってほしいと思います。