match-fn
v2.0.0
Published
Pattern matching with functions.
Downloads
4
Readme
Match-Fn
Pattern matching with functions. Work in Progress.
ToC
- Installation
- Using
- Examples
- API
Installation
yarn add match-fn
npm install match-fn
Using
- Create cases with
createCase
function:
import { createCase } from 'match-fn';
const one = createCase(1);
const two = createCase(value => value === 2);
const three = createCase(3);
const nothing = createCase();
- Pass value and cases to
match
function:
import { match } from 'match-fn';
const value = 3;
const result = match(
one(value => 'Number is 1!'),
two(value => 'Number is 2!'),
three(value => 'Number is 3!'),
nothing(value => `Not matched. Result: ${value}`),
)(value);
console.log(result); // -> 'Number is 2!'
With Promises:
- Create cases with
createCase
function:
import { createCase } from 'match-fn';
const checkPaymentType = type => createCase(res => res.data.type === type);
const Cash = checkPaymentType('cash');
const Card = checkPaymentType('card');
const PayPal = checkPaymentType('paypal');
const nothing = createCase();
- Pass Promise and cases to
match
function:
import { match } from 'match-fn';
import axios from 'axios';
const result = await match(
Cash(res => `${res.data.amount}$ with Cash`),
Card(res => `${res.data.amount}$ with Card`),
PayPal(res => `${res.data.amount}$ with PayPal`),
nothing(res => `Payment method is not selected`),
)(axios.get('/getPayment.json'));
console.log(result); // -> '10$ with PayPal'
Extend "match" and override callback:
/* common.js */
import { match, createCase } from 'match-fn';
const commonCase = createCase(val => val > 5);
const doubleUp = value => value * 2;
const commonMatch = match(commonCase(doubleUp));
export { commonCase, commonMatch };
/* local.js */
import { extend } from 'match-fn/tools';
import { commonMatch, commonCase } from './common';
const square = value => value * value;
// override callback in common case, with local callback
const localMatch = extend(commonMatch, commonCase(square));
const result = localMatch(6);
console.log(result); // -> 36