11月10日にあった「Haskell Day 2018」に参加してきたのでメモ書きです.

午前中 : ハンズオン

igrep 氏が中心になって作成した makeMistakesToLearnHaskell を使ったハンズオン. ぼくも少しだけコミットした.

当日の様子は,みなさんかなり黙々と作業してて静かだったが,Twitter 上で質問している人がチラチラいた. それらの Twitter の様子などをみてリアルタイムに修正を行なっていたのはすごい.

午後

そのうちログミーが公開されるそうなので,概要と感想だけ.

Haskellを導入した話/HRRの話

発表資料はこちら

10年近く職業 Haskeller をやっていた khibino 氏が,当時 Haskell を導入するに至った話と,彼が作った HRR というライブラリの紹介 Perl に変わるグルー言語を求めて Haskell に行き着いたそうだ. 「GHC6.8 ですよ,GHC8.6 じゃなく,すごく無いですか?」すごい. HRRは面白そうだけど,使うタイミングがないや.

Servantで実現する高速かつ安全なAPI

発表資料はこちら

同様に職業 Haskeller の nakaji 氏の発表. Servant という型レベルに RSETful API を定義できるパッケージを実際にどのように使っているかという話. Servant は僕もよく使う. 「実際に依存してるパッケージの紹介」や「実運用する上で困ったこと」などもあって興味深い.

並列並行言語Haskell

発表資料はこちら

次のも含めて2本連続で syocy 氏の発表. Haskell における並行・並列プログラミングについての紹介. 並行・並列プログラミングとして最近は Go・Elixir/Erlang・Rust などが注目されているが,Haskell は20年近く前から並行・並列に対して意識してる. おまけとして,ツールの話や並行並列系パッケージの話があって勉強になる. 余談として「A Tour of Go in Haskell」というのを作ったが,英語版も作ったところめっさ PR が来たという話をしてくれた. やっぱ分母の大きい自然言語は強い.

Dhall: Haskellの新たなキラーアプリ

発表資料はこちら

個人的に今回一番面白かった. Dhall というアプリケーションの紹介. Dhall は設定ファイルを記述するための DSL である. 設定ファイルの多くは YAML や JSON などで書かれるが,複数の YAML が複雑な依存関係を持っている場合(k8sとか)は静的解析したいよね? しかし逆に「設定ファイルとしての領分」を守って欲しいという要求もある(汎用プログラミング言語としての役割はいらない). そこで Dhall です!って感じの発表だった. 最後の導入事例として,自社の設定ファイル群を書き換えた話も面白かった.

Semigroupとは?Monoidとは?環とは?

発表資料はこちら

aiya 氏の発表. 群や環などの代数的構造についての話. ステップバイステップに要件が増えていくのでわかりやすい説明だった.

ちなみに個人的な肌感として,このような数学的な素養がないと Haskell プログラミングができないかというと,そうでもないと思う. 僕自身は教養としてそのあたりを知ってはいるので微妙なところだが,普段 Haskell プログラミングしてる時に意識してはいないはず. ただ,いくつかの言語機能やライブラリは数学や論理学など学術的なバックグランドを持ってることがある. そのような場合は「なぜこのような仕様なのか」「どうしてこのような仕組みでうまくいくかのか」などは,学術論文にしか書いてないことが多い. そのため,そういう機能やライブラリの仕組みを ちゃんと 追おうとする場合は数学的素養がないと厳しいかもしれない.

Haskellで作るCLI

僕の発表.後述します.

gloss: 動かして遊んで学ぶHaskell

発表資料はこちら

lotz 氏の発表. Haskell を勉強したあと何するかシリーズ,GUI 編. 作りたいものがはっきりないときは gloss で振り子やライフゲームを作って遊んでみよう,という感じ. 僕自身はあんまり GUI に関心がないけど,実際に作りたいものがない場合はこういうので色々出力して手をうごしてみるのは正しい. 時間あるときになんか変なことできないか調べてみようかな.

Liszt あるいは永続データ構造を真に永続させる方法

発表資料はこちら

僕が愛用している extensible というライブラリの作者,fumieval 氏の発表. liszt を作り始めていたことは知っていたので気になっていた. Liszt は Kafka のような大量のデータを収集・配信するためのプログラムだそうだ(名前も Franz Kafka に対抗して Franz Liszt らしい). 内部のデータ構造として Skew binary random access list を要素としてもつ 2-3 木 を用いている. このあたりの詳しい話は「純粋関数型データ構造」を読むと良いとのこと(本の名前が上がった瞬間「ですよね〜」となってたw).

自分の話

Haskell で CLI を作るうえでの小話をした。 スライドはこれ.

実はどれも,既に記事におこしたことのあるネタだった.

  1. コマンドライン引数
  2. Alt. Prelude
    • Prelude 微妙だなって思ったら Alt. Prelude なパッケージを使ってみようという話
    • 具体的には愛用している RIO を紹介した
    • rio ライブラリを試す その1
  3. Stack Template
    • よく使う依存パッケージやアプリのインターフェースの書き方がパターン化してきたら Stack Template 化しようという話
    • Stack 1.9 から GitHub にあるテンプレートを参照できるようになった
    • GitHub にあるテンプレートを出力する stack-tpls コマンドの紹介
    • stack-templates を集める with GraphQL

Haskell を知ってる人にとってはあんまり面白くない話題だったかもしれないが,まぁまぁ(発言が)ウケていたのでよかった(?).

おしまい

初心者がわかりやすく,玄人にもウケるネタってなんだろうね. 来年もやるかもしれないから考えておこう.