nix-shellとStackでHaskellプロジェクトの新規作成
StackでHaskellプロジェクトの新規作成
このページを参考にする必要はあまりない気がするので消してもいいが、一応残してるmrsekut.icon
前提
nixを使っている
nix-direnvを使っている
Nix Environment Selectorを使っている
例
mrsekut/kakisute-hs at aa803378f9776e24d9c6eb2c598a767c34d0bf2b
Projectを作る
$ nix-shell -p stack
globalにstackが入っていないので一時的にstackを使える環境に移動
$ stack new hogehoge
λ stack new <project>
stackでprojectを作る
Project内で
projectにshell.nixを置く
例えばこんなん
code:shell.nix
{
compiler ? "ghc901",
}:
let
pkgs = import <nixpkgs> { };
cabal = pkgs.haskellPackages.cabal-install;
ghc = pkgs.haskell.packages.${compiler}.ghcWithPackages (hpkgs: with hpkgs; [
]);
in pkgs.mkShell {
nativeBuildInputs = with pkgs; [
cabal
ghc
stack
hlint
];
}
VSCode上でNix-Env: select environmentでnix.shellを選択
nix-direnvの設定をする
$ echo "use nix" >> .envrc
$ direnv allow
code:.gitignore
.direnv
/direnv
$ stack build
以下は必要ならばやる
上の手順で、ghcのversionは9.0.1を使えるようになるが、stackがdefaulltではそれに対応しいない
stackのversionを変えるためにstack.yamlのresolverを一部修正する
上の手順でstack projectを作成すると、stack.yamlは以下のようになっていた
code:stack.yaml
resolver:
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/18/13.yaml
packages:
- .
stack.yamlのresolverにも書いているが、これは18.4を見ているので、GHCのversionは8.10.4になっている
だから、この状態で{-# LANGUAGE LinearTypes #-}などを書くと、
VSCode上でも赤線が表示されるし、
$ stack ghciしても、↑の部分がエラーになった
stack.yamlを以下のように書き換えたらいけた
code:stack.yaml
resolver: nightly-2021-10-07
packages:
- .