F# を日用する karino2,
Scala にパッチを書いていた kzys,
Haskell の本を書いてしまった jmuk のあとに
日々 for
文を書いて暮らしている自分になにか言うことがあるのか疑問だが、賑やかし程度になんか書く。
Arrow
まず冒頭に出てきた F# の bind に相当するのは Kotlin には無いという話。 Kotlin には Arrow という FP 愛好家向けのマイナーライブラリがある。 そして Kotlin には coroutine がある。その二つは一緒に使われて Monad Comprehension という機能になっている。(らしい。)これがどのくらい F# の bind に近いのか自分はよくわからないけれど、そういうのが好きな人はいることはわかる。
一方で、仮にこれがまあまあ monad してるとしても、こうした流儀が Kotlin コミュニティの中心にあるとは思えない。 端的にいうと Android プログラマは(近似的には)誰も仕事で Arrow 使ってないよね。 同じ JVM 言語でも、Scala なら scalaz なり cats なりは もうちょっと受け入れられているように外野からは見える。 (なお森田の Scala FP 力はこの本 を途中で投げ出したくらい。つまり雑魚。あまり真に受けないでいただきたく。) F# は、よくしらないけどたぶんもうちょっと Haskell に近く functional first なのではなかろうか。
一級市民への道
別の言い方をすると Haskell なり F# なりの monad は言語仕様を超えて一級市民である。Kotlin ではそうでない。
Monad の話をこれ以上続けるのは心苦しいのでもうちょっと身近なところに話を持ってくると、 データ分析言語の R では DataFrame というオブジェクトが一級市民である。 一方データ解析もできる Python にとって DataFrame は単なるライブラリの一つ (Pandas) である。 R のエコシステムではなにかと DataFrame を使う。 JavaScript では何かと JSON を使うみたいな雰囲気を想像すると近い。 一方で Python は DataFrame が出てこない世界の方がずっと広い。 なので R と比べると Python の DataFrame はいまいちしっくりこない。 ここでは jmuk や kzys がいうところのエコシステムが、逆の向きで問題になる。 つまり DSL として特化するが故に強い R のエコシステムが強さになっている。
・・・のかというと、どうだろう。自分は主に Python (Pandas) で DataFrame を使っているけれど、そんなに困っていない。 むかし R をかじってみたことがあるけれど、結局板につかず Python に戻ってきてしまった。 そして今や Python DataFrame 周辺のエコシステムは(分野によっては) R と戦える感じになっている。 汎用言語としての Python エコシステムの強さが R のニッチを侵略している。
つまり、一級市民として特定のアイデアを後押しできるニッチ言語の優位もあるし、 メインストリームの強さがそれをうわ塗るケースもある。 Monad が DataFrame くらい良い抽象なのだとしたら、 non-FP 言語で async 用途以外の monad が普及する日が来るかもしれない。 そんなに重要ではないかもと karino2 はいう。自分にはわからない。
それはさておき NumPy と Pandas の躍進はミラクルじみているとも思っていて、 イノベーションの話をするとき iPhone を引き合いに出すのに似た心苦しさもある。 一般化するにはちょっと飛躍あるんじゃないの? あとはベースの言語自体の versatality は無視できない。 Python は DataFrame をホストできるくらいには強力な文法をもっていた(添字アクセスをフックできるとか)。 でも Kotlin やその他のメインストリーム言語の型システムや構文機能がどれくらい Monad-capable なのか自分にはわからない。言語の懐の深さあってのエコシステムだろうから。
結論としては Android/JetBrains の中の人が勢い余って Arrow やそれ相応の何かを
フレームワーク/言語の下の方につっこむようなミラクルを期待しつつ
しばらく for
(Stream ですらない)と throw new RuntieException()
(Kotlin ですらない)
を書いて僕は生きていきていきますよ・・・
自分がわかってないから難しく感じる面はあると思う。 F# や Scala をやる気にもならないので、せめてそのうち Arrow に入門したい。 中の人は Manning から本を出してほしいもんです。