ライブラリ側の実装は ES2015 の構文を使わずに ES5 互換のままできることに気がついたので, ちゃっちゃーとやりました.
今までは,
var lq = require("loquat"); // 愚直に >>= (bind) と >> (then) を使う // do 構文なんてなかった var parser = lq.char('"') .then(lq.noneOf('"').manyChar()) .bind(str => lq.char('"') .then(lq.pure(str)) );
とか,
var lq = require("loquat"); // Applicative の *> (right) と <* (left) を使って少し簡潔に var parser = lq.char('"') .right(lq.noneOf('"').manyChar()) .left(lq.char('"'));
などと書いていたところを,
var lq = require("loquat"); var parser = lq.gen(function * () { // パーサを yield で投げるとパース結果が返る yield lq.char('"'); var str = yield lq.noneOf('"').manyChar(); yield lq.char('"'); // return で通常の (パーサでない) 値を結果として返す return str; });
のように, かなり直感的に (Parsec で do
構文を使った時のように) 書けるようになりましたとさ.
めでたし.