nix環境でhaskellのprojectをビルド

久しぶりにhaskellを触った際によくわからなくなって調べたのでメモ
とりあえずビルドしたいときのチートシート的にまとめておく

基本的にこちらに書いてある通り

Getting Started Haskell Project with Nix | MaybeVoid

nixはinstall済みだったが一応 ghcとcabalはnixのglobalにいれてしまう

$ curl https://nixos.org/nix/install | sh
$ nix-env -iA nixpkgs.haskell.compiler.ghc865
$ nix-env -i cabal-install

projectの作成とビルド

$ nix-shell --pure -p ghc cabal-install --run "cabal init"
$ nix-shell --pure -p cabal2nix --run "cabal2nix ." > default.nix

$ echo 'let
  pkgs = import <nixpkgs> { };
in
  pkgs.haskellPackages.callPackage ./default.nix { }' > release.nix

$ nix-build release.nix

これでビルドしてexecutableが生成されるようになった ちなみに実行

$ ./result/bin/<project name>

使うpackageを変更するなどでcabal fileを変更した際はdefault.nixを生成してからビルド

$ nix-shell --pure -p cabal2nix --run "cabal2nix ." > default.nix
$ nix-build release.nix

replを使いたい場合

$ nix-shell  --run 'cabal repl'