ろじかるんるんものがたり

病人が特に何も書かない。無駄だからだ。

Scala勉強会第 164 回で発表してきた

表題の通り。今回のテーマは Scala で学ぶ関数型プログラミング…だっけ。スライドはこちら

Scala 特有の関数型プログラミングの話ってなかなかないなあ、難しいなあ、何を話せばいいのかなあ…と考えていた所。ふと、xuwei_k さんに Existential Type の話を振られていた(わけでもないけれど、空リプっぽかった)ことを思い出した。あと、丁度 abstract types は existential types ではないという誤解が自分の中で解けたタイミングだったとか色々あって、existential types について簡単に解説しようと決めました。いつも思ってたんですが xuwei_k さんは「こんなのあるみたいです」というようなことがちょっと多すぎる、のでスライドで突っ込んでおいた。

でまあスライド突貫で作り始めたのですが色々と甘かった。existential types について真面目に話すとなると、かなりの分量を説明しないといけない。最初真面目に命題論理の話から書いてて、途中でこれは無理だなと…self-contained でなければ、なんとかなるかなあと思っていたんですが、結局はスライドゴルフする羽目になった。難しい。あとスライド中の説明はかなり informal なので、そこについては勉強会の性質や参加者のレベルとかを考えてのことなので、承知して欲しい。CS の授業じゃないんですよ。

完全に後付ですが、Scala は言語機能として existential types が(限定的とはいえ)備わっているし、abstract type members を使えばより柔軟にできるし、まあテーマには沿っていたかなと…例えば ML 系の言語には module があるので abstract types 使える、Haskell だって type families 使えば近いことは実現できる。しかし専用に言語サポートがあり、それで足りなければより表現力のある代替手法もありますよ、というのは Scala だけっぽい。まあ、より表現力のある大体手法があるおかげで Scala の existential type が使われることなんて全然ないんですが…勉強会でも、(wildcard syntax 以外で)使ったことある人ーと挙手を求めたら一人しか手が挙がらなかった。そうだよな。そりゃそうだよ。Scala の existential types は Java の wildcards にあわせて用意されたものですよ、と kmizu さん辺りから聞いた記憶があるので、そういう経緯であれば大したことができないのは仕方ない。

結局 existential types とはなんぞ、という話をするのでいっぱいいっぱいで、xuwei_k さんに振られた purescript の Exists に関する説明は大分雑な感じになってしまったのですが、仕方ない。GADTs とかとの関係までしっかりと説明するの無理だし。毎回思うけれどもうちょっと上手く説明できるようにならないといけない。

当日、勉強会に向かう途中で転んで怪我したりアンドロイド君の液晶にかなりのダメージが加わったり、家にいるときもツイッターでなんか dishonestly な感じのことがあったりと、色々あって不機嫌だったのが一番悪い気がする。

 

ところで Java の wildcards と existential types に関しては "Towards an Existential Types Model for Java Wildcards" という論文に纏まっているので、気になる方は読んで見てもいいかもしれません。

なんか無駄に長くなったな、おしまい。