Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@sparklingbaby

Haskell入門 - Stackのインストールと設定

Haskell入門 - Stackのインストールと設定

 どちらかといえばHaskellの門戸を叩くまでのアレ。新しい環境を作る度に古い環境を見ながら右往左往する癖をやめたい。
 インストールは最小限。エディタは好きなものを使う。

Stackのインストール

 最悪これだけあれば良い。
 パッケージマネージャからインストールすると古いものがインストールされるので、curlまたはwgetでインストールする。

  • $HOME/.local/binには、stack installでインストールしたグローバルな何かが降ってくる。
  • .bashrcあたりにオートコンプリート用のアレを仕込んでおくと、ノリでStackをシバけるようになって便利。
  • stack updateはかなり時間がかかる。後回しでもよいが、忘れていると初回ビルドに鬼のような時間がかかって泣く。
$ curl -sSL https://get.haskellstack.org/ | sh
$ echo 'export PATH=~/.local/bin:$PATH' >> ~/.bashrc
$ echo 'eval "$(stack --bash-completion-script stack)"' >> ~/.bashrc
$ stack update

最低限ほしいツール

  • hlintはHaskell用のlinter。初心者であればあるほど入れるべき。
    • 不要なdoの削除やη-簡約の指摘だけでなく、場面により適した関数を提案してくれたりもする。
  • stylish-haskell
    • フォーマッタ。ファイル保存時に自動的に走るようにすると吉。
$ stack install hlint
$ stack install stylish-haskell

次点でほしいやつ

  • haskell-ide-engine (hie)
    • Haskell用の言語サーバ。
    • ビルドにボチボチ時間がかかる。また、ビルドに使用したGHCのバージョンとプロジェクトで使用するGHCのバージョンが同じでないと動かないらしい。
$ git clone https://github.com/haskell/haskell-ide-engine --recursive
$ haskell-ide-engine/install.hs hie

StackのConfigとTemplatesの設定

 Stackを使ってプロジェクトをビルドしたり、stack updateをしたりすると、$HOME/.stack下に諸々が生える。
 これを設定すると、stack newしたときにセクシーなHaskellプロジェクトを生成できるようになる。

  • config.yaml
    • stack newするときの引数のデフォルトを設定できる。
    • フォーマットはググれば出てくるが、概ね下のものを埋めてればいいはず。
    • default-templateにはURLを指定できるので、テンプレートをGithubに置いておくとかしこい。
templates:
  scm-init: git
  params:
    author-name: おなまえ
    author-email: おところ
    copyright: らいせんす
    github-username: githubの名前

default-template: てんぷれーと
  • templates/*.hsfiles
    • ここにはstack newしたときに自動生成されるファイル群のテンプレートを作成する。
    • デフォルトで存在するものに手を加えるといい。
    • おススメはテストフレームワークの追加/変更(doctest, QuickCheck, tastyとか)と、GHCオプションで警告をONにすること。
ghc-options:
- -Wall
- -Wcompat
- -Wincomplete-record-updates
- -Wincomplete-uni-patterns
- -Wredundant-constraints

 これを例えばdependenciesの直上辺りに置いておくと、警告がいっぱい出てなんか楽しくなる。

参考

本気で Haskell したい人向けの Stack チュートリアル
http://web.archive.org/web/20200131232140/https://qiita.com/waddlaw/items/49874f4cf9b680e4b015

2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What is going on with this article?