Haskellに纏わるツールたち
#俯瞰
Haskellに纏わるツールたちを3行で説明する
多すぎでは?キレそうmrsekut.icon
Haskellの環境構築
ビルドツール
Stack
最新の一番わかり易いbuild tool
GHCの導入をしてくれる
Haskellでプロジェクトの作成やビルドをする
cabal-install
前からあったが、地獄が生まれるのでStackが誕生した
パッケージ管理をする
とはいえ、最近はcabalもまともになっているらしい
haskell-nix
大規模アプリケーションを作るときに使おう
上級者向けらしい
Haskell Platform
https://www.haskell.org/platform/
2022年現在deprecated
補足
cabal-installとstackの対応表がある
やっていることがかぶっているからmrsekut.icon
名前が紛らわしいが、Stackとcabal-installは、どちらも
Cabalと.cabalを内部で利用している
ビルドツールは別だが、内部で同じものを使っている箇所がある、という感じ
だからstackでprojectを作ってもcabalの概念が出てくる
Stackとcabal-installの大きな違いは、LTS ResolverであるStackageを使うか否か
前者はコレを使っているため、library同士のversion解決の問題が起こりにくい
table:雑なイメージ
Stack cabal-install
内部で使ってる Cabal Cabal
package管理 package.yaml(hpackで.cabalに変換)または.cabal .cabal
hpack(Haskell)
package.yaml→.cabalの変換をしてくれるやつ
Stackでプロジェクトを作成すれば自動的に付いてくる
なくても良いが、勝手に付いてくるし、ちょい便利だし使うか、ぐらいのイメージ
GHCup
GHC, cabal, HLSのversion管理をするinstaller
設定ファイル
package管理
package.yaml
Stackを使うとついてくる
package管理をする
hpackを使って.cabalに変換して使われる
だから、直接.cabalに書くなら削除してしまっても問題ない
.cabal
Stack、cabal-installのどちらを使ってもついてくる
Stackの場合、package.yamlを使うなら直接編集することはない
package管理をする
stack.yaml
Stackを使うとついてくる
Stackの追加の構成の指定をする
Stackageにないlibaryの使用や、LTSのversion指定などをする
インタプリタとコンパイラ
GHC
Haskellのコンパイラと言えば基本的にこれを指す。これ一択
Haskell仕様に沿ったコンパイラとインタプリタ
GHC拡張とかもある
Hugs
GHCより軽量なインタプリタ
インタプリタのみ
使わなくて良さそう
パッケージアーカイブ
Haskellパッケージの集まり
Hackage
多数の Cabal パッケージを集めたリポジトリ管理サービス
Stackage
StableなHackage
ただのパッケージ集合なHackageに、依存関係安全性の構造をいれたような感じ
全ての依存関係がおかしくならないように頻繁に更新されている
ほぼこっちを使えばいい
Haskellのテスト
ユースケースや、向き不向きを知りたいんだよmrsekut.icon
hspec
利用者に見せたくない振る舞い
デフォルトで使えるやつ?
QuickCheck
ランダムな値を生成してテスト
HUnit
単体テスト
doctest
利用者に見せたい振る舞いを、コメントとしてテストを書く
ドキュメントツール
Haddock
tintin
https://github.com/theam/tintin
alternative to Haddock
formatter
stylish-haskell
最も使われているやつっぽい
importのasとかは右側に揃えられる
brittany
https://github.com/lspitzner/brittany/
floskell
ormolu
hindent
IDE
HLS
Language Server
通称HLS
❌HIE
HLSの前身
2020/8頃に開発終了している
ぐぐると記事がいっぱい出てくるが全部古い
GHCi Helper
https://marketplace.visualstudio.com/items?itemName=rcook.ghci-helper
ghcide
これはなに?
Dante
https://github.com/jyp/dante
hhp
Happy Haskell Programming
https://www.mew.org/~kazu/proj/ghc-mod/en/
参考
Haskell に IDE はないのか?──独断と偏見による Haskell の IDE 十年史
experimentalなpackage manager
ここで紹介されていた
fragnix
https://github.com/fragnix/fragnix
Fragment-based code distribution!
HaskellでModule単位で共有するんじゃなくてもっと小さい単位で共有していこうぜというやつ
ここでの「共有」は「Hackageで管理」と同じような文脈で言ってるmrsekut.icon
snack
https://github.com/nmattia/snack
Nix-based incremental build tool for Haskell projects
既にメンテされてないmrsekut.icon
rien
https://github.com/evertedsphere/rien
Predictable Haskell development environments with Cabal and Nix.
2019で止まってるmrsekut.icon
pier
Yet another Haskell build system.
https://github.com/judah/pier
2018で止まってるmrsekut.icon
#WIP
たぶんいらんやつ
stackage-cli
Stackの開発段階時にあったやつ
Stackに一本化された
何するかは知らん
まだ色々読んでいる途中mrsekut.icon
https://www.one-tab.com/page/R_wEc4xpSiOjGie_TXw11w
#??
何が違う?
$ cabal install hogehoge
$ stack install doctest
$ stack ghciはなに?
baseパッケージを読み込んでghciを起動
つまりルートが読み込まれるということ?
$ stack ghci --package array
arrayパッケージ追加して起動
https://qiita.com/waddlaw/items/49874f4cf9b680e4b015#パッケージの指定
$ runhaskell
はなに?
だれのもの?
いみわからんので 年表作ってくれ
table:年表
cabalがいた
2015 stack登場
どのsnapshot を使うかを stack.yaml の resolver の項目で指定とは