위의 stack --help 에서 확인할 수 있는 것처럼, uninstall 은 아무런 기능도 수행하지 않는다. 그러므로 공식적으로는 패키지를 제거하기 위해 스택을 사용할 방법은 없다. 그럼 패키지를 제거하기 위해서는 수동으로 진행할 수 밖에 없다. 아래에서 살펴보자. 항상 기억해야할 것은 “Cabal is not a Package Manager” 라는 사실이다.


패키지를 삭제하기 위해서는 다음과 같은 형식으로 명령어를 실행한다. 만약 해당 패키지에 의존하고 있는 패키지가 있다면 다음과 같이 연결이 끊어지는 오류가 발생할 수 있다는 메시지를 받는다.


1
2
3
4
5
6
7
# ghc-pkg list xhtml
/usr/lib/ghc/package.conf.d
   xhtml-3000.2.1
/root/.ghc/x86_64-linux-7.10.3/package.conf.d
 
# ghc-pkg unregister xhtml-3000.2.1
ghc-pkg: unregistering would break the following packages: cgi-3001.2.2.2 (use --force to override)
cs


관계없다면 --force 플래그를 추가해서 다음과 같이 삭제한다. 해당 패키지를 다시 조회해보면 다음과 같이 broken package 가 있음을 알 수 있다.

1
2
3
4
5
6
7
# ghc-pkg unregister --force xhtml-3000.2.1
unregistering would break the following packages: cgi-3001.2.2.2 (ignoring)
 
# ghc-pkg list xhtml
WARNING: there are broken packages.  Run 'ghc-pkg check' for more details.
/usr/lib/ghc/package.conf.d
/root/.ghc/x86_64-linux-7.10.3/package.conf.d
cs


그럼, 깨진 패키지도 제거하자. ghc-pkg check 를 통해 깨진 패키지의 이름을 확인할 수 있다. 다음과 같이 해당 패키지를 제거한다.    

1
2
3
4
5
6
7
8
9
10
# ghc-pkg check
There are problems in package cgi-3001.2.2.2:
  dependency "xhtml-3000.2.1-e005917157f780654d68110616d034e8" doesn't exist
The following packages are broken, either because they have a problem
listed above, or because they depend on a broken package.
cgi-3001.2.2.2
 
# ghc-pkg unregister cgi-3001.2.2.2
 
# ghc-pkg check
cs


추가적으로 cabal-gc 등을 통해 가비지 콜렉션을 할 수도 있다.