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-db

特にバージョン管理などはせず、指定したブランチの最新版でビルドしています。コミュニティが小さいうちはこれで十分でしょう。

まとめ

Idris2の開発を便利にしてくれるpackの紹介でした。以後の私のIdris2の記事はpackがあることを前提に書いていこうかなと思ってます。

Written by κeen