Don't Repeat Yourself

Don't Repeat Yourself (DRY) is a principle of software development aimed at reducing repetition of all kinds. -- wikipedia

Mac かつ VSCode で Idris の環境構築をする

Idris Advent Calendar 2020 3日目の記事です。

2020年今年の言語に Idris を選んで年始に Hello, World していたのですが、見事にその後 Python をしていた1年でした(仕事で使うことになったので Python を覚える必要が出てきました)。

完全に Idris は初心者ですが、Idris 楽しんでいきたいと思います!

今回は Mac ユーザー向けに Idris の開発環境構築を紹介します。

Idris とは

だいぶ雑に説明するなら、依存型つき Haskell です。詳しくは2020年 Idris Advent Calendar 1日目の記事をご覧ください。

環境

VSCode 上でコードが書けると安心できますね、ということで VSCode を使用する前提でいます。Idris は REPL が使えるので、それを利用するだけでも Hello, World くらいなら結構簡単にできますが。

Idris のインストールをする

Idris 自体を入れる

2つルートがあります。今回私は Homebrew を使用しました。一方で、公式には cabal によるインストール方法が記載されています。たぶんどちらでもいいと思います。

まず Homebrew から。

$ brew install idris

これが終わった後に、

$ idris --version

しましょう。私の環境では、

❯ idris --version
1.3.3

と返ってきました。Idris は1系と2系があり、2系は開発中なんだそうです。

cabal を入れる

cabal 自体はこのあと必要になるので、別途インストールしておきましょう。

$ brew install cabal-install

これを行ったあとにパスを通す必要があります。.zshrc などに下記を書き足しましょう。

PATH = "$HOME/.cabal/bin:$PATH"

stack の場合は試したことはないです。

VSCode の Extension を入れる

プラグインのインストール

VSCodeプラグインを入れましょう。Extensions で「Idris」と検索すると出てきます。

github.com

この README にしたがって、idringen というプロジェクトマネジメントツールを入れる必要がありそうです*1。プロジェクトマネジメントツールを入れるのは少々抵抗があるかもしれませんが、初心者の場合そもそも言語的なベストプラクティスも知らないと思うので、入れて勉強しようということで私は入れてみました。

最後のメンテが4年前だけど…

idringen を入れる

github.com

cabal を経由して入れます。

$ cabal install idringen

インストール後、下記を叩きます。

$ idrin --help

help コマンドは実装されていないらしい…。メンテのしがいがありそう。

❯ idrin --help
idrin: not support subcmd --help yet
CallStack (from HasCallStack):
  error, called at src/Idringen.hs:28:24 in drngn-0.1.0.3-b556eddc:Idringen

idringen でプロジェクトを作ってみる

sandbox プロジェクトを作りましょう。ちなみに、名前に「-」を入れると生成後エラーになってビルドできません。ご注意を。

new コマンドでプロジェクトを作成できます。

❯ idrin new sandbox
Creating new project named sandbox

Hello, World

ビルドして…

❯ idrin build

実行しましょう。

❯ idrin run
hello sandbox!

これで完了です!

VSCode で開いてみる

シンタックスハイライトもしっかりついていて完璧ですね!これで開発をスタートしていきましょう!

f:id:yuk1tyd:20201202114631p:plain
VSCode で Idris プロジェクトを開いてみた

(これだけ見ると、めっちゃ Haskell ですね)

Idris の本

『Type-Driven Development with Idris』という本があって、いろいろ詳しく書かれているように思います。

PDF も存在していて、下記です。

www.pdfdrive.com

12月中に時間があったら、この本からいくつかエクササイズして記事にしてみようかなと思っています。

*1:なんとExtensionの作者が作っています