嗚呼、帰りたい

プログラミングのことから日常のことまで。いわゆるごった煮というものだな。

Haskellに入門するべくUbuntu18.04でNixを使って環境構築をした

大学が春休みに入ったので,以前から興味があったHaskellに入門することにしました.となると最初に待ち構えるのは環境構築となるわけで,ネット上の様々な記事を読んで作業を進めていたわけですが,結構詰まった部分があって苦労しました.ですから,備忘録としてブログにその過程を残しておきます.誰かの役に立てればいいな.

なお私が環境構築を行ったOSは Ubuntu 18.04.4 LTS です.

今回用いるソフトウェアたち

ネット上の記事によると,ひとえに環境構築といえども異なるツールの組み合わせが存在するようです.そこで今回は

の組み合わせでやっていきます.VSCodeはインストールされていることを前提とします.

NixとHIEをインストールする

Nixでシュッと入れるのがバージョン管理も含めて一番手軽に思えたので以下のページに従ってNixとHIEをインストールします.

ryota-ka.hatenablog.com

stackをインストールする

せっかくNixというパッケージマネージャをインストールしたのですから,有効活用します.ということで早速stackもNixでインストールします.

nix-env -iA nixpkgs.stack nixpkgs.cabal-install 

インストールしたら以下のコマンドを実行します.

stack update

次に ~/.local/bin/ へのパスを通します.私はfishを使っているので以下のコマンドを ~/.config/fish/config.fish に追加しました.

set PATH ~/.local/bin $PATH

ここで,GHC8.6.5を利用するために~/.stack/global-project/stack.yaml

resolver: lts-15.0

resolver: lts-14.27

に変えておきます.GHC8.6.5以外のコンパイラを用いる場合は https://www.stackage.org の Latest LTS per GHC version のところから適宜選択して変更してください.

GHC をインストールする

GHCgmp に依存しているようなので apt でインストールしておきます.

sudo apt install libgmp-dev

以下のコマンドでGHCをインストールします.

stack setup

なお私の環境では以下のエラー

<stderr>: commitAndReleaseBuffer: invalid argument (invalid character)

が出たので,ググったらなんか出てきたこのイシューを参考に,

env LC_ALL="C.UTF-8" stack setup

とすることでインストールできました.

hoogleをインストールする

HIEはAPIドキュメントの表示にhoogleを用いるので以下のコマンドでインストールします.

stack install hoogle

GHCのインストールで述べたものと同様のエラーが出る場合は

env LC_ALL="C.UTF-8" stack install hoogle

を実行するとうまくいきます.

hoogleをインストールしたら

hoogle generate

を実行してセットアップも済ませておきましょう.

プロジェクトの作成

プロジェクトのディレクトリを置きたいディレクトリで以下を実行します.<プロジェクト名> の部分には自由に名前を入れて下さい.

stack new <プロジェクト名> --resolver lts-14.27

すると <プロジェクト名> の名前がついた以下のような構成のディレクトリが生成されます.なお私が用いたstackのバージョンは 2.1.3.1 x86_64 hpack-0.33.0 ですが,他のバージョンではディレクトリの構成が異なるかもしれません.

<プロジェクト名>
├── app
│   └── Main.hs
├── ChangeLog.md
├── <プロジェクト名>.cabal
├── LICENSE
├── package.yaml
├── README.md
├── Setup.hs
├── src
│   └── Lib.hs
├── stack.yaml
├── stack.yaml.lock
└── test
    └── Spec.hs

作成したプロジェクトのディレクトリに移動して以下のコマンドを実行します.もしかするとこのコマンドを実行する必要は無いかもしれませんが,一応,念のため.

stack setup

するとGHC8.6.5がインストールされます.

VSCodeのセットアップ

VSCodeHaskell Language Server という拡張機能をインストールします.これにより,VSCodeでHIEの恩恵にあずかることができます.

marketplace.visualstudio.com

場合によってはエラーが出ることがあるので,その際は

qiita.com

を参考にするといいかもしれません.私の場合はトラブルシューティングの一番最初に載っているエラーが発生しました.

実行する

作成したプロジェクトのディレクトリ内で

stack run

あるいは

stack runhaskell <main関数があるファイルへのパス>

を実行しましょう.以上で環境構築は終わりです.

まとめ

正直なところ環境構築をしてて詰まるところが私は多かったので一旦は入門を諦めようかとも思いましたが,なんとかなってよかったです.