社内で4月から週一でType-Driven Development with Idrisの読書会をやっています。
Type-Driven Development with Idris
- 作者: Edwin Brady
- 出版社/メーカー: Manning Pubns Co
- 発売日: 2017/04/07
- メディア: ペーパーバック
- この商品を含むブログを見る
今年のScalaMatsuriで@cbirchallさんにオススメされたのがキッカケなのですが、依存型(Dependent Type)を使って変態的なことがいろいろできるという話を聞いて面白そうということで有志(いまのところ6人くらい)で集まって緩く読み進めています。
ようやく2章の中盤に差し掛かったところなのでまだ先は長そうですが、1章でIdrisの概要をウォークスルーしたのでIdrisの思想やIdrisでのプログラミングのお作法のようなものが大体わかってきました。いまのところ言語として特徴的な機能だなと感じたのは以下の2点です。
- 依存型では型に値を持たせることができ、型同士の演算が可能
- たとえばString型の要素を2つ持つ
Vec 2 String
とString型の要素を3つ持つVec 3 String
を結合するとVec 5 String
になる
- たとえばString型の要素を2つ持つ
- ホール(hole)というScalaの
???
に似た機能があり、型だけ書いて実装を省略した状態でコンパイルを通すことができる- コンパイラが残っているホールを検出してくれるので、先に型だけ書いて後からホールを埋めていくというプログラミングが可能
数値型にもInt
やInteger
(BigDecimal的なもの)に加えて正の整数を表すNat
があり、配列の添え字などにはNat
を使うというあたりもなるほどと思いました。
このような強力な型の表現力を活かしてより最適な型にリファインを繰り返しながらプログラミングしていくのがType-Driven Developmentのスタイルのようです。まだ、コードを見てもなかなかしっくり来ませんが、後半の章はATMをモデリングしてみるというケーススタディ的な内容になっているようなのでなんとかそこまでたどり着きたいと思います。
ちなみに社内では入門OCamlの読書会も行われているようです。
- 作者: OCaml-Nagoya
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2007/05/22
- メディア: 単行本(ソフトカバー)
- クリック: 59回
- この商品を含むブログ (31件) を見る
さて、どちらが先に完走できるでしょうか。