Skip to content

Instantly share code, notes, and snippets.

@fujitayy
Last active July 10, 2019 08:48
Show Gist options
  • Save fujitayy/887770d19e9a3ce3783024a3e94067dd to your computer and use it in GitHub Desktop.
Save fujitayy/887770d19e9a3ce3783024a3e94067dd to your computer and use it in GitHub Desktop.
Haskell 開発環境

コンパイラのバージョン管理

stackを使う。

インストール: curl -sSL https://get.haskellstack.org/ | sh

インストール後 stack setup とすることで最新のHaskellコンパイラ(GHC)が入る。

パッケージマネージャ

stackを使う。

stack install パッケージ名とコマンド実行することでグローバスコープにインストールできる(ライブラリのスコープの考え方はnpmと同じ)。

パッケージの検索はhackageで出来る。

とりあえずinstallしといた方が良いパッケージ

  • rio (標準ライブラリとよく使われるライブラリをベストプラクティスに基づいて再編集した物)
  • flow (パイプラインオペレーターを提供するパッケージ)
  • stylish-haskell (フォーマッター)
  • hindent (フォーマッター)
  • hlint (linter)
  • hoogle (パッケージ検索)

エディタ

  • Vim系 + haskell-ide-engineに対応した拡張
  • Emacs系 + haskell-ide-engineに対応した拡張
  • VSCode + haskell-ide-engineに対応した拡張
  • Atom + haskell-ide-engineに対応した拡張
  • IntelliJ IDEA + intellij-haskellプラグイン (※IntelliJ IDEA以外では動かないっぽい)

プロジェクト新規作成

stack new プロジェクト名

ドキュメンテーション

プロジェクトディレクトリ内で stack haddock .
stack haddock --open とするとドキュメントを作ったらブラウザで開いてくれる。
生成したドキュメントの場所は stack path --local-doc-root で分かる。

フォーマッター

floskellを下記の設定で使うのが良さそう。

floskell.json

{
    "language": "Haskell2010",
    "style": "base",
    "formatting": {
        "penalty": {
            "linebreak": 120,
            "max-line-length": 120
        }
    }
}

その他に stylish-haskell hindent brittany 等があり、どれを使うかは好みの問題。

LTS Haskell

https://www.stackage.org/

Haskellではコンパイル可能なコンパイラとライブラリの組み合わせがコミュニティによって保守されている。
この組み合わせの事をLTS Haskellと呼んでいる(ただしLTSというほど1バージョン当たりの保守期間は長くないので基本的には更新に追従していく)。
これに乗っかることによってライブラリのバージョンの組み合わせが悪くてコンパイルが出来ずに苦労するという状況を回避できる。

Haskellのライブラリバージョンにはセマンティックバージョングの様な枠組みが使われていないので、作者によってバージョンの付け方が異なる。
LTS Haskellの枠組みがない頃のHaskellではマイナーバージョンが上がっただけで互換性がなくなって動かなくなるなどの悲劇がよく繰り返されていたが LTS Haskellの登場以降はこの様な悲劇は激減した。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment