モナドが便利で、モナド構文糖が便利だってことには特に異論がないんだけど、 それならそれでHaskellのdo-returnみたいに逐次実行に似せるほうが絶対にいいと思う。 そうでなければ、もっとこう、bindとかunitとかそういう語彙を前面に出してほしい。
つまり、Scalaのように、for-yieldとかflatMapというリスト中心の語彙でモナドを扱うのは、どう考えてもキモイ。 (LINQのfrom-selectとかSelectManyとかのあれでモナドを扱うのは、さらにキモイ)
という感覚は、Scalaユーザーと共有することはできないだろうなあ……
(2016/7追記)
scala 界隈でも for はちょっと…という意見はたまに見るし、F# の方が筋いいよねみたいな話 rpscala の懇親会でやった記憶ある。
— りりかるろじかる (@lyrical_logical) 2016年7月28日
いやまあ、Scalaのforは最後がmapじゃないといけない縛りとかあって不便なので当然Haskellのdoの方がいいに決まってますよ。 https://t.co/NAt2oVzi35
— 水島宏太(証明力強化月間) (@kmizu) 2016年7月28日
"モナド構文糖 - 猫とC#について書く代わりにHaskellとF#について書くmatarilloの日記 (id:matarillo(https://profile.hatena.ne.jp/matarillo/) / @matarillo) https://t.co/zmh9pxz7cr" については、Scalaユーザとは十分共有できる感覚だと思いますよ
— 水島宏太(証明力強化月間) (@kmizu) 2016年7月28日
lyrical_logicalさんのツイートを見て、お、追記しておこう、と思ったら、kmizuさんもツイートしてた。
Scalaのfor式が不便(Haskellのdoとreturnみたいに独立してない)というのはそう思うんだけど、言いたかったのはそういうとこじゃないんですよね。
どっちかというと
@kmizu Haskellとか知ってる人には、flatMapはbindだしfor式はdo式の不便なものという感じで説明できるし、そういうの知らない人向けには、コレクションをfor式でまず扱えて、それに加えてflatMap, mapを実装した任意の型に適用できるので
— 水島宏太(証明力強化月間) (@kmizu) 2016年7月28日
@kmizu implicit parameter≒型クラスということ、研究関係以外では最初は全然言ってなかったの(今はもう知られてるからそうでもないかもだけど)もそうだけど、小難しい(そうな)概念をそのままの語彙で導入していない点はOdersky先生のバランス感覚だと思ってる。
— 水島宏太(証明力強化月間) (@kmizu) 2016年7月28日
このあたりが感覚を共有できないと思うあたりで。「コレクションをfor式でまず扱えて」まではいいんだけど、そこから「それに加えてflatMap, mapを実装した任意の型に適用できる」には飛躍があるよね、とか、implicit parameterって結局型クラス以外で使わないんだったら他に名前なかったのか、とかなんですよね。Scala(および設計者のOdersky先生)の選択なんで間違いだとかダメだとかイケてないとかDisりたいわけじゃなくて感覚の問題。