mcz
v1.0.3
Published
A simple pattern matching library for TypeScript/JavaScript
Downloads
29
Maintainers
Readme
mcz
A simple pattern matching library for JavaScript/TypeScript.
Install
$ npm install --save mcz
Usage
in TypeScript
import {match} from "mcz";
var result = match<number, string>(2, when => {
when(1, () => 'One');
when(2, () => 'Two');
when(3, () => 'Three');
when.else(() => 'Others');
});
assert(result === 'Two');
in JavaScript
var match = require("mcz").match;
var result = match(2, function (when) {
when(1, function () {
return 'One';
});
when(2, function () {
return 'Two';
});
when(3, function () {
return 'Three';
});
});
assert(result === 'Two');
API
match<T, U>(matcher: (x: T) => void): (x: T) => U
Create a pattern-matching function.
var f = match<number, string>(when => {
when(1, () => 'Shiori');
when(2, () => 'Kanako');
when(3, () => 'Momoka');
when(4, () => 'Ayaka');
when(5, () => 'Reni');
});
var arr = [1, 2, 3, 4, 5].forEach(f);
console.log(arr);
// ['Shiori', 'Kanako', 'Momoka', 'Ayaka', 'Reni']
match<T, U>(value: T, matcher: (x: T) => void): U
Execute pattern-matching, then returns result.
var result = match<string, string>('Yellow', when => {
when('Red', () => 'Kanako');
when('Yellow', () => 'Shiori');
when('Pink', () => 'Ayaka');
when('Green', () => 'Momoka');
when('Purple', () => 'Reni');
});
assert(result === 'Shiori');
when(that: T, block: (x: T) => U): void
Add a pattern: execute the block
when the value equals that
strictly.
var result = match<any, string>('123', when => {
when(123, () => '123 as a number');
when('123', () => '123 as a string');
});
assert(result === '123 as a string');
when(that: (x: T) => boolean, block: (x: T) => U): void
Add a pattern: execute the block
when the function that
returns true.
var result = match<any, string>(new Date(), when => {
when(x => x instanceof String, () => 'value is String');
when(x => x instanceof Number, () => 'value is Number');
when(x => x instanceof Date, () => 'value is Date');
});
assert(result === 'value is Date');
when.else(block: (x: T) => U): void
Add a pattern: execute the block
when the value does not match any other values.
var result = match<number, string>(9, when => {
when(x => x < 0, () => 'Less than 0');
when(x => x < 2, () => 'Less than 2');
when(x => x < 4, () => 'Less than 4');
when(x => x < 6, () => 'Less than 6');
when.else(() => 'Equals 6, or greater than 6');
});
assert(result === 'Equals 6, or greater than 6');
How to build or test
- Clone this repository.
- Run
npm install
to install dependencies. - Run
npm run build
ornpm test
.
License
MIT © 2016 shogogg