環境のセットアップ
Setup
0. set flake.nix and .envrc
flake.nix
code:nix
{
description = "haskell flake sample";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils, ... }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs { inherit system; };
haskellPackages = with pkgs.haskell.packages.ghc9102; [
ghc
haskell-language-server
implicit-hie
];
in {
devShells.default = pkgs.mkShell {
packages = with pkgs; [
stack
cabal-install
] ++ haskellPackages;
};
});
}
.
code: .envrc
use flake
1. setup devShell
code:sh
direnv allow
2. set .vscode/settings.json
"haskell.manageHLS": "PATH", is the most important setting.
code: settings.json
{
"haskell": {
"editor.defaultFormatter": "haskell.haskell",
"editor.formatOnSave": true,
"editor.formatOnPaste": true
},
"haskell.manageHLS": "PATH",
"haskell.plugin.semanticTokens.globalOn": true,
"nixEnvSelector.nixFile": "${workspaceFolder}/flake.nix"
}
3. create a stack project
code:sh
stack new <package-name> simple --bare
4. update .gitignore
code: .gitignore
# Nix
/.direnv
# Haskell
.stack-work/
*~
5. create hie.yaml
https://qiita.com/keigoi/items/11fb25a9f08b9accfb22
hie.yaml は、hie-biosというコンポーネントがプロジェクトの検出をする際に必要とするyamlファイル
逆にこのファイルさえあれば、Haskell Language Serverは、プロジェクトを読み込んえ処理できるらしい
hie (= Hashell IDE Engine)
code: hie.yaml
cradle:
stack:
- path: "./src"
component: "<package-name>:exe:<package-name>"
※ automatically generating command
code:sh
gen-hie > hie.yaml
6. remove Setup.hs
code:sh
rm Setup.hs
Build and Exec
code:sh
stack build
stack exec <package-name>
Run
code:sh
stack run <package-name>:exe:<package-name>
Test
code:sh
stack test