sol/hpack: hpack: An alternative format for Haskell packages

hpackとは, cabalファイルを生成してくれるツールです.

hpackは何が良いのか

yamlである hpackのフォーマットである package.yaml はyamlフォーマットです. 独自のフォーマットを採用しているcabalとは違い, 様々なエディタが普通に対応しており, プログラムからも扱いやすくなっています.

ボイラープレートを自動生成してくれる default-language: Haskell2010 のような現代では当たり前の記述を自動生成してくれるため, わざわざ書かなくて済むようになります.

exposed-modulesを自動生成してくれる cabalではexportするモジュールを全て library の exposed-modules に書かなくてはいけませんでした. hpackでは library : source-dirs : src のように書くだけで, src 以下のモジュールを自動的にcabalに書いてくれます. 長い記述が不要になり, モジュールの名前が変わっても自動的に変更されるので, 楽です.

other-modulesを自動生成してくれる hspecなどを使うと test-suite の other-modules にたくさんSpecモジュールを書く必要がありますが, hpackを使うとこれも自動生成してくれます.楽です.

build-dependsの共通部分をまとめられる cabalでは library と test-suite などの build-depends に共通部分があっても, それらを全てコピペして並べなければいけませんでした. 面倒くさいですし, 共通の依存が並んでいると test-suite だけが要求するライブラリがわかりにくくなります. hpackではトップレベルの場所に dependencies: を書いておくと, cabalファイルでは library も executables も test-suite もこの依存を継承するようになります. 後は以下のように tests 部分だけに test だけが要求する依存をわかりやすく記述することが出来ます. tests : test : main : Spec.hs source-dirs : test dependencies : - foo-application - hspec - yesod-test

githubのURLからhomepage, bug-reports, source-repositoryを自動生成してくれる github : user/repo のようにgithubのリポジトリを指定すると, 自動的にcabalに homepage , bug-reports , source-repository を記述してくれます. 楽です.