JavaScript版stringParser

上のコードはMonadを利用して作ったstringParserが入ってます。

stringParser []
    = do return []
stringParser (ch:t)
    = do result <- charParser ch
         results <- stringParser t
         return (result:results)

これをJavaScript版で作るとしたら以下のようになるでしょうか。

var stringParser = function(text) {
  if (text == "") return Return("");
  return Bind(Char(text.substr(0, 1)), function (ch) {
    return Bind(stringParser(text.substr(1)), function (tail) {
      return Return(ch + tail);
    });
  });
};

よく知っているものへ対応付けることで、Haskellのdo記法(やMonadそのもの)が実際の手続き的にはどんな構造になるのかわかるきっかけになるかもしれない。


モナド則だとかいろいろな取り巻く概念とかは、仕組みでも振る舞いでも、どれか理解ができて初めて導入すべき知識だと思う。某入門〜は、たった十数行のコードで説明してその後ですぐモナド則を書いてるけど、それでその法則がもたらす意味がわかる人には、この本は必要ないのではないかと思う。言い換えれば、難しい(知ってる人が少なそうな)概念を使って(実のところは)簡単な仕組みを説明してる。あの本は結構そういう説明が多いんで、正直入門書としての評価はかなり低い。Javaの麻奈本とくらべてすら。入門書で難しく見せてどうするのだろう。以下自粛。

><