Hatena::Grouphaskell

猫とC#について書く代わりにHaskellとF#について書くmatarilloの日記 このページをアンテナに追加 RSSフィード

2015-03-31

モナド構文糖

| 15:14 | モナド構文糖 - 猫とC#について書く代わりにHaskellとF#について書くmatarilloの日記 のブックマークコメント

モナドが便利で、モナド構文糖が便利だってことには特に異論がないんだけど、

それならそれでHaskellのdo-returnみたいに逐次実行に似せるほうが絶対にいいと思う。

そうでなければ、もっとこう、bindとかunitとかそういう語彙を前面に出してほしい。

つまり、Scalaのように、for-yieldとかflatMapというリスト中心の語彙でモナドを扱うのは、どう考えてもキモイ。

LINQのfrom-selectとかSelectManyとかのあれでモナドを扱うのは、さらにキモイ)

という感覚は、Scalaユーザーと共有することはできないだろうなあ……

(2016/7追記)

lyrical_logicalさんのツイートを見て、お、追記しておこう、と思ったら、kmizuさんもツイートしてた。

Scalaのfor式が不便(Haskellのdoとreturnみたいに独立してない)というのはそう思うんだけど、言いたかったのはそういうとこじゃないんですよね。

どっちかというと

このあたりが感覚を共有できないと思うあたりで。「コレクションをfor式でまず扱えて」まではいいんだけど、そこから「それに加えてflatMap, mapを実装した任意の型に適用できる」には飛躍があるよね、とか、implicit parameterって結局型クラス以外で使わないんだったら他に名前なかったのか、とかなんですよね。Scala(および設計者のOdersky先生)の選択なんで間違いだとかダメだとかイケてないとかDisりたいわけじゃなくて感覚の問題。