Idris2の管理はpackにお任せ
このエントリはIdris/Idris2 Advent Calendar 2022の1日目の記事として過去に遡って投稿しています。
κeenです。ぼちぼちIdris2を触りはじめたので小出しに色々なことを書いていきます。今回はIdris2のインストーラ兼パッケージマネージャ兼ビルドツールのpackについて
packはIdris2のインストーラ兼パッケージマネージャ兼ビルドツールです。これ1つでほとんどのことが済む便利ツールです。名前がなんか汎用的すぎて他と被りそうで心配ですね。
インストール
ちゃんとした情報は最新のインストールガイドを参照して欲しいのですが、以下のコマンド1発でインストールできます。
bash -c "$(curl -fsSL https://raw.githubusercontent.com/stefan-hoeck/idris2-pack/main/install.bash)"
これだけでpackのインストールとIdris2の処理系のインストールまで済みます。ただし、事前にChezSchemeのインストールが必要です。Ubuntuとかだと apt install chezscheme
とかで入るのでサクっと入れておきます。
インストールは処理系のビルドも含むのでちょっと時間がかります。コーヒーを用意してのんびり待ちましょう。
便利な使い方
パッケージ管理
手軽にライブラリをインストールできます
pack install hogehoge
バイナリも同様です。
pack install-app fugafuga
プロジェクト管理
pack new
で新しくプロジェクトを作れます。
pack new lib piyo
以下のようにデフォルトでビルドできるファイルを置いてくれるので手早くはじめられますね。
$ pack new bin HelloWorld
$ cd HelloWorld
$ cat src/Main.idr
module Main
main : IO ()
main = putStrLn "Hello from Idris2!"
因みにtreeは以下のようになっています。
.
├── HelloWorld.ipkg
├── pack.toml
├── src
│ └── Main.idr
└── test
├── src
│ └── Main.idr
└── test.ipk
ipkgを指定してビルドをしてくれます。idris2のコマンド体系が長いので地味に有り難いですね。
pack build json.ipkg
型検査もできます。
pack typecheck elab-util.ipkg
実行
普通に実行できます。
pack run test.ipkg -n 50
また、REPLも走らせられます。
pack repl
-P
でパッケージをリンクしたり --rlwrap
でreadline wrapperを噛ませたりできるので使い勝手はかなりいいんじゃないでしょうか。
$ pack -P contrib --rlwrap repl
____ __ _ ___
/ _/___/ /____(_)____ |__ \
/ // __ / ___/ / ___/ __/ / Version 0.6.0-59aadd650
_/ // /_/ / / / (__ ) / __/ https://www.idris-lang.org
/___/\__,_/_/ /_/____/ /____/ Type :? for help
Welcome to Idris 2. Enjoy yourself!
Main> :module Language.JSON
Imported module Language.JSON
Main> parse "{\"hoge\": true}
パッケージソース
パッケージ管理をしてくれるツールをみるとどこにサーバがあるか気になりますが、packはGitHubを使って手動管理しているようです。emacsのelpaとかと同じ仕組みですね。
特にバージョン管理などはせず、指定したブランチの最新版でビルドしています。コミュニティが小さいうちはこれで十分でしょう。
まとめ
Idris2の開発を便利にしてくれるpackの紹介でした。以後の私のIdris2の記事はpackがあることを前提に書いていこうかなと思ってます。