0.4.3 • Published 6 years ago

@lato/babel-plugin-function-composition v0.4.3

Weekly downloads
-
License
MIT
Repository
github
Last release
6 years ago

@lato/babel-plugin-function-composition

This plugin is made to work with point-free (tacit) functional programming by composing functions over piping. It is inspired by the work of babel-plugin-pipe-operator-curry, but with a very different purpose, with focus on omitting arguments. I've overloaded the operator << and >> for that. You can built more complex functions from simple ones.

Examples

import { add, multiply } from 'ramda';

const mul5AndAdd5 = add(5) << multiply(5);

Turn into

import { add, multiply } from 'ramda';

const mul5AndAdd5 = ((l, r) => (...a) => l(r(...a)))((add(5)), (multiply(5)));

>> is << flipped, and both operators bind to the left in js, so

expr1 << expr2 >> expr3

is the same as (but with different order of evaluation):

expr3 << (expr1 << expr2)

Thanks to function composition being associative, you can drop the parentheses:

expr3 << expr1 << expr2

Disabling in current scope

If you want to use the original shift operators, you can disable this plugin in current scope (and in children scopes) using 'no composition' directive.

Installation

$ npm install --save-dev @lato/babel-plugin-function-composition

Usage

Via .babelrc (Recommended)

.babelrc

{
  "plugins": ["@lato/babel-plugin-function-composition"]
}

Via CLI

$ babel --plugins "@lato/babel-plugin-function-composition" script.js

Via Node API

require('babel-core').transform('code', {
  plugins: ['@lato/babel-plugin-function-composition']
});

License

MIT

0.4.3

6 years ago

0.4.2

6 years ago

0.4.1

6 years ago

0.4.0

6 years ago

0.3.2

6 years ago

0.3.1

6 years ago

0.3.0

6 years ago