Ramda.jsでカリー化する

Ramda.jsには任意の関数をカリー化する curry()があります。

curried_func = R.curry( (arg) => { some_codes(); } )

といった書式でカリー化された関数が得られます。

ただし、ES6のクラス内ではメソッドしか定義できないという制約と干渉して、この書式を採れません。
constructor()内でcurry()することも可能ですが、関数定義と実際に利用する関数が分離するためコードが錯綜します。

クラス内のプロパティ定義は、ドラフト段階のESには機能があります。

Babelの場合、 transform-class-propertiesというプラグインでクラスプロパティが利用可能になり、このプラグインは Stage 2プリセットに含まれています。

babel-preset-stage-2を設定すれば、クラス直下に変数を定義できます。

Babel Stage-2の使い方

プリセットのコードをインストールします。

$ npm install babel-preset-stage-2 --save-dev

webpack.config.jsの該当ブロックは以下のような設定です。

  module: {
    rules: [{
      test: /\.js$/,
      loader: 'babel-loader',
      options: {
        presets: ['stage-2'],
      },
    }]
  } 

この設定により、

curried_func = R.curry( (arg) => { some_codes(); } )

の形式で記述でき、this.curried_func(arg)で呼び出せます。

中馬崇尋
Chuma Takahiro