일단 cabal은 패키지 관리가 똥망임
sandbox써도 캐싱이 안되서 새 프로젝트 만들면 전부 컴파일 다시해야됨.
stack은 안써봤는데 시스템 ghc가 아니라 자체 설치하는게 불-편
그리고 Hackage에 있는 모든 패키지를 지원하지는 않는걸로 앎
nix는 Hackage에 있는 패키지 전부 쓸 수 있고, nix-shell로 원하는 패키지만 활성화 시킬수 있는데다, ghc랑 패키지 전부 캐싱됨 (심지어 다른 계정간에도!)
그리고 캐시서버에서 바이너리로 받아오는거라 stack이나 cabal마냥 컴파일에 시간 쏟을 필요도 없음
아치도 하스켈 패키지 관리는 gg쳐서 진짜 nix밖에 답이 없음
요즘 하스켈 환경 잡을 때 cabal only로 가는건 진짜 한물 간듯 하고, stack쓰거나 nix+cabal로 가는듯? nix가 진짜 바이너리 캐싱때문에 상당히 좋은거같던데 맥 지원이 지금 헤까닥해보이는거같아서 써보기 쫄림. Stack 쓸 때 stackage에 없고 hackage에만 있는것도 쓸 수는 있으요 근데 stackage에 있는 다른 패키지랑 호환 보장은 안 되는 식. stack샌드박스에 GHC 까는건 나도 처음에는 아 이렇게 해야하나 싶었는데 어차피 stack ghc 하면 되니까 시스템 GHC 깔 일이 없어서 체감은 별로 안됨. xmonad같은거 쓰려면 다를 수 있을수도? 개인적으로 GHC가 버젼 지정해서 컴파일이 되면 이렇게까지 개판나지는 않았을 것 같은데
리소스나 복잡성때문에 버젼 지정하면 그냥 문법을 바꾸는 어프로치를 취하는건가 싶기도 하고.
개인적으로 보는 nix의 장점이자 단점은 하스켈 뿐만 아니라 다른(언어든 뭐든) 패키지들도 다 쓴다는건데 개발 환경 전체를 nix로 잡아버리면 진짜 편하긴 하겠지만 그 대가로 하스켈 프로젝트 구성할 때 좀 verbose해지는 느낌.
https://maybevoid.com/posts/2019-01-27-getting-started-haskell-nix.html
이거 보고 느낀건데 실제로 하면 다를 수도 있겠다는 생각은 들음.